Skip to content

Instantly share code, notes, and snippets.

@MortimerGoro
Created June 25, 2014 20:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MortimerGoro/026f7ddaf3ca729b49a1 to your computer and use it in GitHub Desktop.
Save MortimerGoro/026f7ddaf3ca729b49a1 to your computer and use it in GitHub Desktop.
Bison Ambiguity
Option 1,
statements -> <Rule 11, tokens 1 .. 8>
statement -> <Rule 2, tokens 1 .. 1>
expression -> <Rule 343, tokens 1 .. 1>
prefix_expression -> <Rule 347, tokens 1 .. 1>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 1 .. 1>
primary_expression -> <Rule 362, tokens 1 .. 1>
"ID" <tokens 1 .. 1>
generic_argument_clause_opt -> <Rule 363, empty>
semicolon_opt -> <Rule 3, empty>
statements -> <Rule 11, tokens 2 .. 8>
statement -> <Rule 2, tokens 2 .. 4>
expression -> <Rule 343, tokens 2 .. 3>
prefix_expression -> <Rule 347, tokens 2 .. 3>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 2 .. 3>
primary_expression -> <Rule 369, tokens 2 .. 3>
parenthesized_expression -> <Rule 416, tokens 2 .. 3>
"(" <tokens 2 .. 2>
expression_element_list_opt -> <Rule 417, empty>
")" <tokens 3 .. 3>
semicolon_opt -> <Rule 4, tokens 4 .. 4>
";" <tokens 4 .. 4>
statements -> <Rule 11, tokens 5 .. 8>
statement -> <Rule 2, tokens 5 .. 5>
expression -> <Rule 343, tokens 5 .. 5>
prefix_expression -> <Rule 347, tokens 5 .. 5>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 5 .. 5>
primary_expression -> <Rule 362, tokens 5 .. 5>
"ID" <tokens 5 .. 5>
generic_argument_clause_opt -> <Rule 363, empty>
semicolon_opt -> <Rule 3, empty>
statements -> <Rule 10, tokens 6 .. 8>
statement -> <Rule 2, tokens 6 .. 8>
expression -> <Rule 343, tokens 6 .. 7>
prefix_expression -> <Rule 347, tokens 6 .. 7>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 6 .. 7>
primary_expression -> <Rule 369, tokens 6 .. 7>
parenthesized_expression -> <Rule 416, tokens 6 .. 7>
"(" <tokens 6 .. 6>
expression_element_list_opt -> <Rule 417, empty>
")" <tokens 7 .. 7>
semicolon_opt -> <Rule 4, tokens 8 .. 8>
";" <tokens 8 .. 8>
Option 2,
statements -> <Rule 11, tokens 1 .. 8>
statement -> <Rule 2, tokens 1 .. 4>
expression -> <Rule 343, tokens 1 .. 3>
prefix_expression -> <Rule 347, tokens 1 .. 3>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 426, tokens 1 .. 3>
function_call_expression -> <Rule 434, tokens 1 .. 3>
postfix_expression -> <Rule 424, tokens 1 .. 1>
primary_expression -> <Rule 362, tokens 1 .. 1>
"ID" <tokens 1 .. 1>
generic_argument_clause_opt -> <Rule 363, empty>
parenthesized_expression -> <Rule 416, tokens 2 .. 3>
"(" <tokens 2 .. 2>
expression_element_list_opt -> <Rule 417, empty>
")" <tokens 3 .. 3>
semicolon_opt -> <Rule 4, tokens 4 .. 4>
";" <tokens 4 .. 4>
statements -> <Rule 11, tokens 5 .. 8>
statement -> <Rule 2, tokens 5 .. 5>
expression -> <Rule 343, tokens 5 .. 5>
prefix_expression -> <Rule 347, tokens 5 .. 5>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 5 .. 5>
primary_expression -> <Rule 362, tokens 5 .. 5>
"ID" <tokens 5 .. 5>
generic_argument_clause_opt -> <Rule 363, empty>
semicolon_opt -> <Rule 3, empty>
statements -> <Rule 10, tokens 6 .. 8>
statement -> <Rule 2, tokens 6 .. 8>
expression -> <Rule 343, tokens 6 .. 7>
prefix_expression -> <Rule 347, tokens 6 .. 7>
prefix_operator_opt -> <Rule 348, empty>
postfix_expression -> <Rule 424, tokens 6 .. 7>
primary_expression -> <Rule 369, tokens 6 .. 7>
parenthesized_expression -> <Rule 416, tokens 6 .. 7>
"(" <tokens 6 .. 6>
expression_element_list_opt -> <Rule 417, empty>
")" <tokens 7 .. 7>
semicolon_opt -> <Rule 4, tokens 8 .. 8>
";" <tokens 8 .. 8>
/******* STATEMENTS *******/
program: statements {ast = $1;}
/******* STATEMENTS *******/
// GRAMMAR OF A STATEMENT
statement : expression semicolon_opt { $$ = [[StatementNode alloc] initWithStatement:$1]; LOG("statement (0)\n"); }
semicolon_opt: | ";" { }
statement : declaration semicolon_opt { }
statement : loop_statement semicolon_opt { }
statement : branch_statement semicolon_opt { }
statement : labeled_statement { }
statement : control_transfer_statement semicolon_opt { }
statements : statement %dprec 2 {$$ = [[StatementsNode alloc] initWithCurrent:$1]; }
| statement statements %dprec 1 {$$ = [[StatementsNode alloc] initWithCurrent:$1 next:(StatementsNode*)$2]; }
test();
test();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment