From 8a57bedc04fff7a92ef6d2762cfe5fc17050f021 Mon Sep 17 00:00:00 2001 From: Akshay Date: Fri, 30 Apr 2021 22:22:13 +0530 Subject: add yacc programs --- 10/input | 1 + 10/main.l | 22 ++++++++++++++++++++++ 10/main.y | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 10/input create mode 100644 10/main.l create mode 100644 10/main.y (limited to '10') diff --git a/10/input b/10/input new file mode 100644 index 0000000..fdfb61b --- /dev/null +++ b/10/input @@ -0,0 +1 @@ +1+2-3*6/2 diff --git a/10/main.l b/10/main.l new file mode 100644 index 0000000..9962054 --- /dev/null +++ b/10/main.l @@ -0,0 +1,22 @@ +%{ +extern int yylval; +%} + +d [0-9]+ + +%% +"+" return ADD; +"-" return SUB; +"*" return MUL; +"/" return DIV; +[0-9]+ { + yylval = atoi(yytext); + return NUM; +}; +. return yytext[0]; +\n return 0; +%% + +int yywrap() { + return 1; +} diff --git a/10/main.y b/10/main.y new file mode 100644 index 0000000..f45e23f --- /dev/null +++ b/10/main.y @@ -0,0 +1,33 @@ +%{ +#include +#include +int yylex(); +int yyerror(char *); +%} + +%token ADD SUB MUL DIV NUM +%left ADD SUB MUL DIV + +%% +R: E { + printf("result: %d", $$); + return 0; + } +E: E ADD T { $$ = $1 + $3; } + | E SUB T { $$ = $1 - $3; } + | T + ; +T: T MUL NUM { $$ = $1 * $3; } + | T DIV NUM { $$ = $1 / $3; } + | NUM { $$ = $1; } + ; +%% + +int main() { + yyparse(); +} + +int yyerror(char *s) { + printf("error: %s", s); + exit(0); +} -- cgit v1.2.3