| OLD | NEW | 
|---|
| 1 <html> | 1 <html> | 
| 2 <head> | 2 <head> | 
| 3 <title>The Lemon Parser Generator</title> | 3 <title>The Lemon Parser Generator</title> | 
| 4 </head> | 4 </head> | 
| 5 <body bgcolor=white> | 5 <body bgcolor=white> | 
| 6 <h1 align=center>The Lemon Parser Generator</h1> | 6 <h1 align=center>The Lemon Parser Generator</h1> | 
| 7 | 7 | 
| 8 <p>Lemon is an LALR(1) parser generator for C or C++. | 8 <p>Lemon is an LALR(1) parser generator for C or C++. | 
| 9 It does the same job as ``bison'' and ``yacc''. | 9 It does the same job as ``bison'' and ``yacc''. | 
| 10 But lemon is not another bison or yacc clone.  It | 10 But lemon is not another bison or yacc clone.  It | 
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 275 It does not have sections or divisions like yacc or bison.  Any | 275 It does not have sections or divisions like yacc or bison.  Any | 
| 276 declaration can occur at any point in the file. | 276 declaration can occur at any point in the file. | 
| 277 Lemon ignores whitespace (except where it is needed to separate | 277 Lemon ignores whitespace (except where it is needed to separate | 
| 278 tokens) and it honors the same commenting conventions as C and C++.</p> | 278 tokens) and it honors the same commenting conventions as C and C++.</p> | 
| 279 | 279 | 
| 280 <h3>Terminals and Nonterminals</h3> | 280 <h3>Terminals and Nonterminals</h3> | 
| 281 | 281 | 
| 282 <p>A terminal symbol (token) is any string of alphanumeric | 282 <p>A terminal symbol (token) is any string of alphanumeric | 
| 283 and underscore characters | 283 and underscore characters | 
| 284 that begins with an upper case letter. | 284 that begins with an upper case letter. | 
| 285 A terminal can contain lower class letters after the first character, | 285 A terminal can contain lowercase letters after the first character, | 
| 286 but the usual convention is to make terminals all upper case. | 286 but the usual convention is to make terminals all upper case. | 
| 287 A nonterminal, on the other hand, is any string of alphanumeric | 287 A nonterminal, on the other hand, is any string of alphanumeric | 
| 288 and underscore characters than begins with a lower case letter. | 288 and underscore characters than begins with a lower case letter. | 
| 289 Again, the usual convention is to make nonterminals use all lower | 289 Again, the usual convention is to make nonterminals use all lower | 
| 290 case letters.</p> | 290 case letters.</p> | 
| 291 | 291 | 
| 292 <p>In Lemon, terminal and nonterminal symbols do not need to | 292 <p>In Lemon, terminal and nonterminal symbols do not need to | 
| 293 be declared or identified in a separate section of the grammar file. | 293 be declared or identified in a separate section of the grammar file. | 
| 294 Lemon is able to generate a list of all terminals and nonterminals | 294 Lemon is able to generate a list of all terminals and nonterminals | 
| 295 by examining the grammar rules, and it can always distinguish a | 295 by examining the grammar rules, and it can always distinguish a | 
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 474      shift, but report a parsing conflict. | 474      shift, but report a parsing conflict. | 
| 475 <li> If the precedence of the token to be shifted is greater than | 475 <li> If the precedence of the token to be shifted is greater than | 
| 476      the precedence of the rule to reduce, then resolve in favor | 476      the precedence of the rule to reduce, then resolve in favor | 
| 477      of the shift.  No parsing conflict is reported. | 477      of the shift.  No parsing conflict is reported. | 
| 478 <li> If the precedence of the token it be shifted is less than the | 478 <li> If the precedence of the token it be shifted is less than the | 
| 479      precedence of the rule to reduce, then resolve in favor of the | 479      precedence of the rule to reduce, then resolve in favor of the | 
| 480      reduce action.  No parsing conflict is reported. | 480      reduce action.  No parsing conflict is reported. | 
| 481 <li> If the precedences are the same and the shift token is | 481 <li> If the precedences are the same and the shift token is | 
| 482      right-associative, then resolve in favor of the shift. | 482      right-associative, then resolve in favor of the shift. | 
| 483      No parsing conflict is reported. | 483      No parsing conflict is reported. | 
| 484 <li> If the precedences are the same the the shift token is | 484 <li> If the precedences are the same the shift token is | 
| 485      left-associative, then resolve in favor of the reduce. | 485      left-associative, then resolve in favor of the reduce. | 
| 486      No parsing conflict is reported. | 486      No parsing conflict is reported. | 
| 487 <li> Otherwise, resolve the conflict by doing the shift and | 487 <li> Otherwise, resolve the conflict by doing the shift and | 
| 488      report the parsing conflict. | 488      report the parsing conflict. | 
| 489 </ul> | 489 </ul> | 
| 490 Reduce-reduce conflicts are resolved this way: | 490 Reduce-reduce conflicts are resolved this way: | 
| 491 <ul> | 491 <ul> | 
| 492 <li> If either reduce rule | 492 <li> If either reduce rule | 
| 493      lacks precedence information, then resolve in favor of the | 493      lacks precedence information, then resolve in favor of the | 
| 494      rule that appears first in the grammar and report a parsing | 494      rule that appears first in the grammar and report a parsing | 
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 883 | 883 | 
| 884 <p>If the parser pops its stack until the stack is empty, and it still | 884 <p>If the parser pops its stack until the stack is empty, and it still | 
| 885 is unable to shift the error symbol, then the %parse_failed routine | 885 is unable to shift the error symbol, then the %parse_failed routine | 
| 886 is invoked and the parser resets itself to its start state, ready | 886 is invoked and the parser resets itself to its start state, ready | 
| 887 to begin parsing a new file.  This is what will happen at the very | 887 to begin parsing a new file.  This is what will happen at the very | 
| 888 first syntax error, of course, if there are no instances of the | 888 first syntax error, of course, if there are no instances of the | 
| 889 ``error'' non-terminal in your grammar.</p> | 889 ``error'' non-terminal in your grammar.</p> | 
| 890 | 890 | 
| 891 </body> | 891 </body> | 
| 892 </html> | 892 </html> | 
| OLD | NEW | 
|---|