/* * Απλό πρόγραμμα συντακτικής αναγνώρισης και υπολογισμού * αριθμητικών εκφράσεων, με προτεραιότητες και προσεταιριστικότητες * τελεστών και με σημασιολογικές τιμές των συμβόλων. * Συντακτικός αναλυτής. * * URL: http://courses.softlab.ntua.gr/compilers/ * * Νικόλαος Σ. Παπασπύρου (nickie@softlab.ntua.gr) * 22 Μαρτίου 2005. */ %token T_plus "+" %token T_times "*" %token T_lparen "(" %token T_rparen ")" %token T_num %{ void yyerror (const char * msg); %} %left "+" %left "*" %{ typedef int YYSTYPE; %} %% S : E { printf("Result: %d\n", $1); } ; E : E "+" E { $$ = $1 + $3; } | E "*" E { $$ = $1 * $3; } | "(" E ")" { $$ = $2; } | T_num { $$ = $1; } ; %% void yyerror (const char * msg) { printf("Error: %s\n", msg); } int main () { int result = yyparse(); if (result == 0) printf("Success!\n"); else printf("Failure!\n"); return result; }