1 %{ 2 #include<stdio.h> 3 %} 4 5 %token IF ELSE 6 %token IDENTIFIER CONSTANT STRING_LITERAL 7 %token EQ_OP 8 9 %start compound_statement 10 11 %% 12 13 assignment_statement 14 : IDENTIFIER '=' expression 15 ; 16 17 selection_statement 18 : IF '(' expression ')' statement 19 | IF '(' expression ')' statement ELSE statement 20 ; 21 22 expression 23 : IDENTIFIER 24 | CONSTANT 25 | STRING_LITERAL 26 | '(' expression ')' 27 | expression EQ_OP expression 28 ; 29 30 statement 31 : compound_statement 32 | selection_statement 33 | assignment_statement 34 ; 35 36 statement_list 37 : statement 38 | statement_list ';' statement 39 ; 40 41 compound_statement 42 : '{' '}' 43 | '{' statement_list '}' 44 ; 45 46 %% 47 48 int main() 49 { 50 yyparse(); 51 } 52 53 int yyerror(char* s) 54 { 55 fprintf(stderr, "%s\n", s); 56 return 0; 57 } 58 59 /* 60 int yylex() 61 { 62 return 0; 63 } 64 */ 65 #include "lex.yy.c"