diff --git a/lab-4/parser.bison b/lab-4/parser.bison index 794cbe1..d2110b3 100644 --- a/lab-4/parser.bison +++ b/lab-4/parser.bison @@ -10,7 +10,7 @@ int yylex(); %define parse.error detailed %token TOKEN_EOF -%token TOKEN_IDENTIFICATION +%token TOKEN_KEYWORD_IDENTIFICATION %token TOKEN_KEYWORD_DIVISION %token TOKEN_KEYWORD_DATA %token TOKEN_KEYWORD_SECTION @@ -73,26 +73,35 @@ statement : section | data_space | data_declaration ; + section : type TOKEN_KEYWORD_DIVISION TOKEN_DOT | type TOKEN_RUN TOKEN_DOT ; -sect_data : TOKEN_PROGRAM_ID TOKEN_DOT TOKEN_IDENT TOKEN_DOT +sect_data : TOKEN_PROGRAM_ID TOKEN_DOT TOKEN_IDENT TOKEN_DOT ; -type : TOKEN_IDENTIFICATION +type : TOKEN_KEYWORD_IDENTIFICATION | TOKEN_PROCEDURE | TOKEN_STOP | TOKEN_KEYWORD_DATA ; -simple_stmt : function - | TOKEN_KEYWORD_FUNCTION cbl_function +simple_stmt : cbl_function + | cbl_function params + | cbl_function assignment_stmt + | cbl_function params assignment_stmt ; -cbl_function : TOKEN_KEYWORD_COMPUTE parms +assignment_stmt : TOKEN_EQUAL ext_function + | TOKEN_KEYWORD_TO TOKEN_IDENT + | TOKEN_KEYWORD_TO TOKEN_IDENT categry_contain ; -function : TOKEN_DISPLAY parms - | function simple_stmt - | if_branch +params: : TOKEN_IDENT + | TOKEN_STRING ; -parms : TOKEN_STRING +ext_function: : TOKEN_KEYWORD_FUNCTION TOKEN_IDENT TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS + ; +cbl_function : TOKEN_DISPLAY + | TOKEN_MOVE + | TOKEN_KEYWORD_COMPUTE + | TOKEN_PERFORM ; if_branch : if_branch parms if_branch | TOKEN_IF @@ -111,7 +120,6 @@ data_category : TOKEN_ALPHANUMERIC ; categry_contain : TOKEN_LEFT_PARENTHESIS TOKEN_INTEGER TOKEN_RIGHT_PARENTHESIS ; - complete_category: complete_category complete_category | data_category categry_contain ; @@ -125,19 +133,15 @@ data_clause : TOKEN_COMPUTATION_LEVEL_0 full_data_clause: data_clause data_clause | data_clause ; - -data_declaration: simple_decl - | full_decl - ; simple_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_DOT ; full_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_PICTURE complete_category TOKEN_DOT | TOKEN_INTEGER TOKEN_IDENT TOKEN_PICTURE complete_category full_data_clause TOKEN_DOT | TOKEN_INTEGER TOKEN_IDENT TOKEN_PICTURE complete_category full_data_clause TOKEN_INTEGER TOKEN_DOT ; - - - +data_declaration: simple_decl + | full_decl + ; %% diff --git a/lab-4/scanner.flex b/lab-4/scanner.flex index b6843eb..ae317d3 100644 --- a/lab-4/scanner.flex +++ b/lab-4/scanner.flex @@ -7,7 +7,7 @@ DIGIT [0-9]+ (" "|\t|\n) /* skip whitespace */ \*>\ ?.* { return TOKEN_COMMENT; } -IDENTIFICATION { return TOKEN_IDENTIFICATION; } +IDENTIFICATION { return TOKEN_KEYWORD_IDENTIFICATION; } DIVISION { return TOKEN_KEYWORD_DIVISION; } PROGRAM-ID { return TOKEN_PROGRAM_ID; } PROCEDURE { return TOKEN_PROCEDURE; }