Skip to content

Commit b7d55cf

Browse files
authored
Fixed: grammar.g is now ll(1) after left recursion removal and left factoring (#34)
1 parent 1353882 commit b7d55cf

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

grammar.g

+11-13
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ main cin cout
1313

1414
## Non Terminals
1515
%non_terminals
16-
<primary_expression> <constant> <unary_operator> <unary_expression>
17-
<cast_expression> <type_specifier> <multiplicative_expression>
18-
<additive_expression> <shift_expression> <relational_expression>
16+
<primary_expression> <constant> <unary_operator> <type_specifier>
17+
<unary_expression> <multiplicative_expression> <additive_expression>
18+
<shift_expression> <relational_expression>
1919
<equality_expression> <assignment_expression> <expression>
2020
<declaration> <init_declarator_list> <init_declarator>
2121
<initializer> <declarator> <direct_declarator>
@@ -40,11 +40,10 @@ main cin cout
4040
<unary_operator> : -
4141
<unary_expression> : <primary_expression>
4242
<unary_expression> : <unary_operator> <primary_expression>
43-
<cast_expression> : <unary_expression>
44-
<cast_expression> : ( <type_specifier> ) <cast_expression>
45-
<multiplicative_expression> : <multiplicative_expression> * <cast_expression>
46-
<multiplicative_expression> : <multiplicative_expression> / <cast_expression>
47-
<multiplicative_expression> : <multiplicative_expression> % <cast_expression>
43+
<multiplicative_expression> : <unary_expression>
44+
<multiplicative_expression> : <multiplicative_expression> * <unary_expression>
45+
<multiplicative_expression> : <multiplicative_expression> / <unary_expression>
46+
<multiplicative_expression> : <multiplicative_expression> % <unary_expression>
4847
<additive_expression> : <multiplicative_expression>
4948
<additive_expression> : <additive_expression> + <multiplicative_expression>
5049
<additive_expression> : <additive_expression> - <multiplicative_expression>
@@ -62,13 +61,12 @@ main cin cout
6261
<equality_expression> : <equality_expression> == <relational_expression>
6362
<equality_expression> : <equality_expression> != <relational_expression>
6463
<assignment_expression> : <equality_expression>
65-
<assignment_expression> : identifier = <assignment_expression>
6664
<expression> : <assignment_expression>
6765

6866
## Declarations
6967
<declaration> : <type_specifier> <init_declarator_list> ;
7068
<init_declarator_list> : <init_declarator>
71-
<init_declarator_list> : <init_declarator_list> , <init_declarator>
69+
<init_declarator_list> : <init_declarator> , <init_declarator_list>
7270
<init_declarator_list> : EPSILON
7371
<init_declarator> : <declarator>
7472
<init_declarator> : <declarator> = <initializer>
@@ -86,14 +84,14 @@ main cin cout
8684
<statement> : <selection_statement>
8785
<compound_statement> : { <block_item_list> }
8886
<block_item_list> : <block_item>
89-
<block_item_list> : <block_item_list> <block_item>
87+
<block_item_list> : <block_item> <block_item_list>
9088
<block_item_list> : EPSILON
9189
<block_item> : <declaration>
9290
<block_item> : <statement>
9391
<expression_statement> : <expression> ;
9492
<expression_statement> : ;
95-
<selection_statement> : if ( <expression> ) <statement>
96-
<selection_statement> : if ( <expression> ) <statement> else <statement>
93+
<selection_statement> : if ( <expression> ) <compound_statement>
94+
<selection_statement> : if ( <expression> ) <compound_statement> else <compound_statement>
9795

9896
## Main
9997
<program> : <type_specifier> main ( ) <compound_statement>

0 commit comments

Comments
 (0)