Merge branch 'josh_bison' of gitlab.cs.wallawalla.edu:lustje/language-interpreter-lab into josh_bison

This commit is contained in:
Josh 2024-11-07 11:06:50 -08:00
commit 1352861bb6
4 changed files with 112 additions and 49 deletions

View File

@ -10,7 +10,7 @@ int yylex();
%define parse.error detailed %define parse.error detailed
%token TOKEN_EOF %token TOKEN_EOF
%token TOKEN_IDENTIFICATION %token TOKEN_KEYWORD_IDENTIFICATION
%token TOKEN_KEYWORD_DIVISION %token TOKEN_KEYWORD_DIVISION
%token TOKEN_KEYWORD_DATA %token TOKEN_KEYWORD_DATA
%token TOKEN_KEYWORD_SECTION %token TOKEN_KEYWORD_SECTION
@ -69,40 +69,77 @@ statement : section
| sect_data | sect_data
| simple_stmt | simple_stmt
| data_space | data_space
| data_declaration
; ;
section : type TOKEN_KEYWORD_DIVISION TOKEN_DOT section : type TOKEN_KEYWORD_DIVISION TOKEN_DOT
| type TOKEN_RUN 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_PROCEDURE
| TOKEN_STOP | TOKEN_STOP
| TOKEN_KEYWORD_DATA | TOKEN_KEYWORD_DATA
; ;
simple_stmt : function simple_stmt : cbl_function
| TOKEN_KEYWORD_FUNCTION cbl_function | cbl_function param
| cbl_function assignment_stmt
| cbl_function param 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 param : TOKEN_IDENT
| function simple_stmt | TOKEN_STRING
| if_branch
; ;
parms : TOKEN_STRING ext_function : TOKEN_KEYWORD_FUNCTION TOKEN_IDENT TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS
; ;
if_branch : if_branch parms if_branch cbl_function : TOKEN_DISPLAY
| TOKEN_MOVE
| TOKEN_KEYWORD_COMPUTE
| TOKEN_PERFORM
;
if_branch : if_branch param if_branch
| TOKEN_IF | TOKEN_IF
| TOKEN_ELSE_IF | TOKEN_ELSE_IF
| TOKEN_ELSE | TOKEN_ELSE
| TOKEN_END_IF | TOKEN_END_IF
; ;
data_space : TOKEN_WORKING_STORAGE TOKEN_KEYWORD_SECTION TOKEN_DOT data_space : TOKEN_WORKING_STORAGE
| TOKEN_KEYWORD_SECTION
| TOKEN_DOT
;
data_category : TOKEN_ALPHANUMERIC
| TOKEN_NUMERIC
| TOKEN_SIGNED_NUMERIC
| TOKEN_IMPLIED_DECIMAL
;
categry_contain : TOKEN_LEFT_PARENTHESIS TOKEN_INTEGER TOKEN_RIGHT_PARENTHESIS
;
complete_category: complete_category complete_category
| data_category categry_contain
;
data_clause : TOKEN_COMPUTATION_LEVEL_0
| TOKEN_COMPUTATION_LEVEL_1
| TOKEN_COMPUTATION_LEVEL_2
| TOKEN_COMPUTATION_LEVEL_3
| TOKEN_KEYWORD_VALUE
| TOKEN_KEYWORD_OCCURS
;
full_data_clause: data_clause data_clause
| data_clause
;
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
; ;
%% %%

View File

@ -0,0 +1,24 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. variables.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SORT-AREA.
05 WS-SORT-TABLE.
10 WS-SORT-ROW PIC X(10) OCCURS 100.
05 WS-TEMP-ROW PIC X(10).
05 WS-ROW-MAX PIC S9(4) COMP VALUE 100.
05 WS-SORT-MAX PIC S9(4) COMP.
05 WS-I PIC S9(4) COMP.
05 WS-J PIC S9(4) COMP.
05 WS-INDEX PIC S9(4) COMP.
77 a PIC S9(5)V9(5) COMP-3 VALUE 1.
77 b PIC S9(5)V9(5) COMP-3 VALUE 5.
77 c PIC S9(5)V9(5) COMP-3 VALUE 6.
77 discriminant PIC S9(5)V9(5) COMP-3.
77 root1 PIC S9(5)V9(5) COMP-3.
77 root2 PIC S9(5)V9(5) COMP-3.
77 square-root-discriminant PIC S9(5)V9(5) COMP-3.
PROCEDURE DIVISION.
DISPLAY 'Hello World!'
STOP RUN.

View File

@ -7,7 +7,7 @@ DIGIT [0-9]+
(" "|\t|\n) /* skip whitespace */ (" "|\t|\n) /* skip whitespace */
\*>\ ?.* { return TOKEN_COMMENT; } \*>\ ?.* { return TOKEN_COMMENT; }
IDENTIFICATION { return TOKEN_IDENTIFICATION; } IDENTIFICATION { return TOKEN_KEYWORD_IDENTIFICATION; }
DIVISION { return TOKEN_KEYWORD_DIVISION; } DIVISION { return TOKEN_KEYWORD_DIVISION; }
PROGRAM-ID { return TOKEN_PROGRAM_ID; } PROGRAM-ID { return TOKEN_PROGRAM_ID; }
PROCEDURE { return TOKEN_PROCEDURE; } PROCEDURE { return TOKEN_PROCEDURE; }

View File

@ -55,7 +55,7 @@ extern int yydebug;
YYerror = 256, /* error */ YYerror = 256, /* error */
YYUNDEF = 257, /* "invalid token" */ YYUNDEF = 257, /* "invalid token" */
TOKEN_EOF = 258, /* TOKEN_EOF */ TOKEN_EOF = 258, /* TOKEN_EOF */
TOKEN_IDENTIFICATION = 259, /* TOKEN_IDENTIFICATION */ TOKEN_KEYWORD_IDENTIFICATION = 259, /* TOKEN_KEYWORD_IDENTIFICATION */
TOKEN_KEYWORD_DIVISION = 260, /* TOKEN_KEYWORD_DIVISION */ TOKEN_KEYWORD_DIVISION = 260, /* TOKEN_KEYWORD_DIVISION */
TOKEN_KEYWORD_DATA = 261, /* TOKEN_KEYWORD_DATA */ TOKEN_KEYWORD_DATA = 261, /* TOKEN_KEYWORD_DATA */
TOKEN_KEYWORD_SECTION = 262, /* TOKEN_KEYWORD_SECTION */ TOKEN_KEYWORD_SECTION = 262, /* TOKEN_KEYWORD_SECTION */
@ -73,37 +73,39 @@ extern int yydebug;
TOKEN_UNTIL = 274, /* TOKEN_UNTIL */ TOKEN_UNTIL = 274, /* TOKEN_UNTIL */
TOKEN_END_PERFORM = 275, /* TOKEN_END_PERFORM */ TOKEN_END_PERFORM = 275, /* TOKEN_END_PERFORM */
TOKEN_IF = 276, /* TOKEN_IF */ TOKEN_IF = 276, /* TOKEN_IF */
TOKEN_END_IF = 277, /* TOKEN_END_IF */ TOKEN_ELSE = 277, /* TOKEN_ELSE */
TOKEN_SPACE = 278, /* TOKEN_SPACE */ TOKEN_ELSE_IF = 278, /* TOKEN_ELSE_IF */
TOKEN_KEYWORD_OCCURS = 279, /* TOKEN_KEYWORD_OCCURS */ TOKEN_END_IF = 279, /* TOKEN_END_IF */
TOKEN_KEYWORD_VALUE = 280, /* TOKEN_KEYWORD_VALUE */ TOKEN_SPACE = 280, /* TOKEN_SPACE */
TOKEN_KEYWORD_COMPUTE = 281, /* TOKEN_KEYWORD_COMPUTE */ TOKEN_KEYWORD_OCCURS = 281, /* TOKEN_KEYWORD_OCCURS */
TOKEN_KEYWORD_FUNCTION = 282, /* TOKEN_KEYWORD_FUNCTION */ TOKEN_KEYWORD_VALUE = 282, /* TOKEN_KEYWORD_VALUE */
TOKEN_IDENT = 283, /* TOKEN_IDENT */ TOKEN_KEYWORD_COMPUTE = 283, /* TOKEN_KEYWORD_COMPUTE */
TOKEN_STRING = 284, /* TOKEN_STRING */ TOKEN_KEYWORD_FUNCTION = 284, /* TOKEN_KEYWORD_FUNCTION */
TOKEN_INTEGER = 285, /* TOKEN_INTEGER */ TOKEN_IDENT = 285, /* TOKEN_IDENT */
TOKEN_PICTURE = 286, /* TOKEN_PICTURE */ TOKEN_STRING = 286, /* TOKEN_STRING */
TOKEN_ALPHANUMERIC = 287, /* TOKEN_ALPHANUMERIC */ TOKEN_INTEGER = 287, /* TOKEN_INTEGER */
TOKEN_NUMERIC = 288, /* TOKEN_NUMERIC */ TOKEN_PICTURE = 288, /* TOKEN_PICTURE */
TOKEN_SIGNED_NUMERIC = 289, /* TOKEN_SIGNED_NUMERIC */ TOKEN_ALPHANUMERIC = 289, /* TOKEN_ALPHANUMERIC */
TOKEN_IMPLIED_DECIMAL = 290, /* TOKEN_IMPLIED_DECIMAL */ TOKEN_NUMERIC = 290, /* TOKEN_NUMERIC */
TOKEN_COMPUTATION_LEVEL_0 = 291, /* TOKEN_COMPUTATION_LEVEL_0 */ TOKEN_SIGNED_NUMERIC = 291, /* TOKEN_SIGNED_NUMERIC */
TOKEN_COMPUTATION_LEVEL_1 = 292, /* TOKEN_COMPUTATION_LEVEL_1 */ TOKEN_IMPLIED_DECIMAL = 292, /* TOKEN_IMPLIED_DECIMAL */
TOKEN_COMPUTATION_LEVEL_2 = 293, /* TOKEN_COMPUTATION_LEVEL_2 */ TOKEN_COMPUTATION_LEVEL_0 = 293, /* TOKEN_COMPUTATION_LEVEL_0 */
TOKEN_COMPUTATION_LEVEL_3 = 294, /* TOKEN_COMPUTATION_LEVEL_3 */ TOKEN_COMPUTATION_LEVEL_1 = 294, /* TOKEN_COMPUTATION_LEVEL_1 */
TOKEN_LEFT_PARENTHESIS = 295, /* TOKEN_LEFT_PARENTHESIS */ TOKEN_COMPUTATION_LEVEL_2 = 295, /* TOKEN_COMPUTATION_LEVEL_2 */
TOKEN_RIGHT_PARENTHESIS = 296, /* TOKEN_RIGHT_PARENTHESIS */ TOKEN_COMPUTATION_LEVEL_3 = 296, /* TOKEN_COMPUTATION_LEVEL_3 */
TOKEN_DOT = 297, /* TOKEN_DOT */ TOKEN_LEFT_PARENTHESIS = 297, /* TOKEN_LEFT_PARENTHESIS */
TOKEN_COMMENT = 298, /* TOKEN_COMMENT */ TOKEN_RIGHT_PARENTHESIS = 298, /* TOKEN_RIGHT_PARENTHESIS */
TOKEN_ADD = 299, /* TOKEN_ADD */ TOKEN_DOT = 299, /* TOKEN_DOT */
TOKEN_SUB = 300, /* TOKEN_SUB */ TOKEN_COMMENT = 300, /* TOKEN_COMMENT */
TOKEN_MULTIPLY = 301, /* TOKEN_MULTIPLY */ TOKEN_ADD = 301, /* TOKEN_ADD */
TOKEN_DIVIDE = 302, /* TOKEN_DIVIDE */ TOKEN_SUB = 302, /* TOKEN_SUB */
TOKEN_EQUAL = 303, /* TOKEN_EQUAL */ TOKEN_MULTIPLY = 303, /* TOKEN_MULTIPLY */
TOKEN_GREATER_THAN = 304, /* TOKEN_GREATER_THAN */ TOKEN_DIVIDE = 304, /* TOKEN_DIVIDE */
TOKEN_LESS_THAN = 305, /* TOKEN_LESS_THAN */ TOKEN_EQUAL = 305, /* TOKEN_EQUAL */
TOKEN_EXPONENTIAL = 306, /* TOKEN_EXPONENTIAL */ TOKEN_GREATER_THAN = 306, /* TOKEN_GREATER_THAN */
TOKEN_DISPLAY = 307 /* TOKEN_DISPLAY */ TOKEN_LESS_THAN = 307, /* TOKEN_LESS_THAN */
TOKEN_EXPONENTIAL = 308, /* TOKEN_EXPONENTIAL */
TOKEN_DISPLAY = 309 /* TOKEN_DISPLAY */
}; };
typedef enum yytokentype yytoken_kind_t; typedef enum yytokentype yytoken_kind_t;
#endif #endif