From 8e76fdca913ccfe06212761787c00128753bc283 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 7 Nov 2024 18:18:21 -0800 Subject: [PATCH] parse quadratic --- lab-4/parser.bison | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/lab-4/parser.bison b/lab-4/parser.bison index 458d394..4e21a07 100644 --- a/lab-4/parser.bison +++ b/lab-4/parser.bison @@ -28,6 +28,8 @@ int yylex(); %token TOKEN_UNTIL %token TOKEN_END_PERFORM %token TOKEN_IF +%token TOKEN_ELSE_IF +%token TOKEN_ELSE %token TOKEN_END_IF %token TOKEN_SPACE %token TOKEN_KEYWORD_OCCURS @@ -60,6 +62,7 @@ int yylex(); %token TOKEN_EXPONENTIAL %token TOKEN_DISPLAY + %% file : statements statements : statements statement @@ -83,16 +86,39 @@ type : TOKEN_KEYWORD_IDENTIFICATION | TOKEN_KEYWORD_DATA ; simple_stmt : cbl_function - | cbl_function param + | cbl_function param | cbl_function assignment_stmt | cbl_function param assignment_stmt + | cbl_function TOKEN_IDENT assignment_stmt + | if_branch + ; +expression : op_parms + | bool + ; +bool : op_parms TOKEN_EQUAL op_parms ; assignment_stmt : TOKEN_EQUAL ext_function + | TOKEN_EQUAL function | TOKEN_KEYWORD_TO TOKEN_IDENT | TOKEN_KEYWORD_TO TOKEN_IDENT categry_contain ; +op_parms : op_parms TOKEN_ADD op_parms + | op_parms TOKEN_SUB op_parms + | op_parms TOKEN_MULTIPLY op_parms + | op_parms TOKEN_DIVIDE op_parms + | op_parms TOKEN_EXPONENTIAL op_parms + | op_parms TOKEN_LESS_THAN op_parms + | op_parms TOKEN_GREATER_THAN op_parms + | TOKEN_SUB op_parms + | TOKEN_LEFT_PARENTHESIS op_parms TOKEN_RIGHT_PARENTHESIS + | TOKEN_IDENT + | TOKEN_INTEGER + ; param : TOKEN_IDENT | TOKEN_STRING + | param param + ; +function : op_parms ; ext_function : TOKEN_KEYWORD_FUNCTION TOKEN_IDENT TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS ; @@ -101,10 +127,9 @@ cbl_function : TOKEN_DISPLAY | TOKEN_KEYWORD_COMPUTE | TOKEN_PERFORM ; -if_branch : if_branch param if_branch - | TOKEN_IF - | TOKEN_ELSE_IF - | TOKEN_ELSE +if_branch : TOKEN_IF expression + | TOKEN_ELSE_IF expression + | TOKEN_ELSE statement | TOKEN_END_IF ; data_space : TOKEN_WORKING_STORAGE