From 58dad1f505634083d55dc07fe066577a431a2828 Mon Sep 17 00:00:00 2001 From: Riley Smith Date: Tue, 12 Nov 2024 16:25:39 -0800 Subject: [PATCH] move over files again --- lab-5/parser.bison | 84 ++++++++++++----------------- lab-5/samples/quadratic-snippet.cbl | 2 - lab-5/samples/sorting-snippet.cbl | 1 - lab-5/scanner.flex | 2 +- 4 files changed, 35 insertions(+), 54 deletions(-) diff --git a/lab-5/parser.bison b/lab-5/parser.bison index 0876739..dfeb38e 100644 --- a/lab-5/parser.bison +++ b/lab-5/parser.bison @@ -1,41 +1,14 @@ %{ #define YYDEBUG 1 #include - -#include -#include -#include -#include "expr.h" - -/* -YYSTYPE is the lexical value returned by each rule in a bison grammar. -By default, it is an integer. In this example, we are returning a pointer to an expression. -*/ - -#define YYSTYPE struct expr * - -/* -Clunky: Manually declare the interface to the scanner generated by flex. -*/ - -extern char *yytext; -extern int yylex(); extern int yylineno; void yyerror(const char*); - - -/* -Clunky: Keep the final result of the parse in a global variable, -so that it can be retrieved by main(). -*/ - -struct expr * parser_result = 0; +int yylex(); %} %debug %define parse.error detailed - %token TOKEN_EOF %token TOKEN_KEYWORD_IDENTIFICATION %token TOKEN_KEYWORD_DIVISION @@ -102,6 +75,7 @@ statement : section | data_space | data_declaration ; + section : type TOKEN_KEYWORD_DIVISION TOKEN_DOT | type TOKEN_RUN TOKEN_DOT ; @@ -119,43 +93,53 @@ simple_stmt : cbl_func_stmt cbl_func_stmt : cbl_function | cbl_function op_parms | cbl_function assignment_stmt - | cbl_function op_parms assignment_stmt + | cbl_function op_parm assignment_stmt ; assignment_stmt : TOKEN_EQUAL ext_function - | TOKEN_EQUAL function + | TOKEN_EQUAL op_parms | TOKEN_KEYWORD_TO op_parms ; -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 - | op_parms TOKEN_EQUAL op_parms - | TOKEN_SUB op_parms - | TOKEN_LEFT_PARENTHESIS op_parms TOKEN_RIGHT_PARENTHESIS - | expr - | op_parms op_parms +op_parms : op_parm + | op_parms op_parm ; -expr : TOKEN_IDENT +op_parm : mathmaticalexpr + | booleanexpr + | type_expr + ; +mathmaticalexpr : type_expr + | mathmaticalexpr TOKEN_ADD mathmaticalexpr + | mathmaticalexpr TOKEN_SUB mathmaticalexpr + | mathmaticalexpr TOKEN_MULTIPLY mathmaticalexpr + | mathmaticalexpr TOKEN_DIVIDE mathmaticalexpr + | mathmaticalexpr TOKEN_EXPONENTIAL mathmaticalexpr + | container_expr + | type_expr container_expr + ; +container_expr : TOKEN_LEFT_PARENTHESIS op_parms TOKEN_RIGHT_PARENTHESIS + ; +booleanexpr : mathmaticalexpr TOKEN_LESS_THAN mathmaticalexpr + | mathmaticalexpr TOKEN_GREATER_THAN mathmaticalexpr + | mathmaticalexpr TOKEN_EQUAL mathmaticalexpr + ; +type_expr : TOKEN_IDENT | TOKEN_INTEGER | TOKEN_STRING | TOKEN_SPACE - ; -function : op_parms + | TOKEN_SUB TOKEN_IDENT ; 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 : TOKEN_IF op_parms - | TOKEN_ELSE_IF op_parms - | TOKEN_ELSE statement - | TOKEN_END_IF +if_branch : if_start statements else_parts + ; +if_start : TOKEN_IF booleanexpr + ; +else_parts : + | TOKEN_ELSE_IF booleanexpr statements else_parts + | TOKEN_ELSE statements ; perform_stmt : TOKEN_PERFORM TOKEN_VARYING TOKEN_IDENT TOKEN_KEYWORD_FROM TOKEN_INTEGER TOKEN_KEYWORD_BY TOKEN_INTEGER TOKEN_UNTIL op_parms | TOKEN_END_PERFORM diff --git a/lab-5/samples/quadratic-snippet.cbl b/lab-5/samples/quadratic-snippet.cbl index ab76e40..7f27b4d 100644 --- a/lab-5/samples/quadratic-snippet.cbl +++ b/lab-5/samples/quadratic-snippet.cbl @@ -24,12 +24,10 @@ DISPLAY "The equation has two distinct real roots: " DISPLAY "Root 1: " root1 DISPLAY "Root 2: " root2 - ELSE IF discriminant = 0 COMPUTE root1 = -b / (2 * a) DISPLAY "The equation has one real root: " DISPLAY "Root: " root1 ELSE DISPLAY "The equation has no real roots." - STOP RUN. diff --git a/lab-5/samples/sorting-snippet.cbl b/lab-5/samples/sorting-snippet.cbl index 8324e47..07b2ebd 100644 --- a/lab-5/samples/sorting-snippet.cbl +++ b/lab-5/samples/sorting-snippet.cbl @@ -39,7 +39,6 @@ PROCEDURE DIVISION. MOVE WS-SORT-ROW(WS-J) TO WS-TEMP-ROW MOVE WS-SORT-ROW(WS-J + 1) TO WS-SORT-ROW(WS-J) MOVE WS-TEMP-ROW TO WS-SORT-ROW(WS-J + 1) - END-IF END-PERFORM END-PERFORM diff --git a/lab-5/scanner.flex b/lab-5/scanner.flex index ca9acac..4b7a148 100644 --- a/lab-5/scanner.flex +++ b/lab-5/scanner.flex @@ -1,5 +1,5 @@ %{ -#include "parser.h" +#include "token.h" %} NAME [a-zA-Z]([a-zA-Z0-9_-]*[a-zA-Z0-9])? DIGIT [0-9]+