make cbl_func_stmt easier

This commit is contained in:
vel 2024-11-13 17:50:28 -08:00
parent a089fe73db
commit 7e8d5162df
Signed by: velvox
GPG Key ID: 59D9762F674151DF
2 changed files with 30 additions and 26 deletions

View File

@ -92,17 +92,23 @@ simple_stmt : cbl_func_stmt
| else_parts | else_parts
| perform_stmt | perform_stmt
; ;
cbl_func_stmt : cbl_function cbl_func_stmt : display_stmt
| cbl_function op_parms | move_stmt
| cbl_function assignment_stmt | compute_stmt
| cbl_function op_parm assignment_stmt ;
display_stmt : TOKEN_DISPLAY op_parms_list
;
move_stmt : TOKEN_MOVE op_parms_list assignment_stmt
;
compute_stmt : TOKEN_KEYWORD_COMPUTE single_op_parm assignment_stmt
; ;
assignment_stmt : TOKEN_EQUAL ext_function assignment_stmt : TOKEN_EQUAL ext_function
| TOKEN_EQUAL op_parms | TOKEN_EQUAL op_parms_list
| TOKEN_KEYWORD_TO op_parms | TOKEN_KEYWORD_TO op_parms_list
; ;
op_parms : op_parm op_parms_list : single_op_parm
| op_parms op_parm | op_parms_list op_parm
; ;
op_parm : mathmaticalexpr op_parm : mathmaticalexpr
| booleanexpr | booleanexpr
@ -111,15 +117,15 @@ op_parm : mathmaticalexpr
term : mathmaticalexpr term : mathmaticalexpr
; ;
mathmaticalexpr : type_expr mathmaticalexpr : type_expr
| container_expr
| type_expr container_expr
| mathmaticalexpr TOKEN_ADD term | mathmaticalexpr TOKEN_ADD term
| mathmaticalexpr TOKEN_SUB term | mathmaticalexpr TOKEN_SUB term
| mathmaticalexpr TOKEN_MULTIPLY term | mathmaticalexpr TOKEN_MULTIPLY term
| mathmaticalexpr TOKEN_DIVIDE term | mathmaticalexpr TOKEN_DIVIDE term
| mathmaticalexpr TOKEN_EXPONENTIAL term | mathmaticalexpr TOKEN_EXPONENTIAL term
| container_expr ;
| type_expr container_expr container_expr : TOKEN_LEFT_PARENTHESIS op_parms_list TOKEN_RIGHT_PARENTHESIS
;
container_expr : TOKEN_LEFT_PARENTHESIS op_parms TOKEN_RIGHT_PARENTHESIS
; ;
booleanexpr : mathmaticalexpr TOKEN_LESS_THAN term booleanexpr : mathmaticalexpr TOKEN_LESS_THAN term
| mathmaticalexpr TOKEN_GREATER_THAN term | mathmaticalexpr TOKEN_GREATER_THAN term
@ -133,17 +139,13 @@ type_expr : TOKEN_IDENT
; ;
ext_function : TOKEN_KEYWORD_FUNCTION TOKEN_IDENT TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS ext_function : TOKEN_KEYWORD_FUNCTION TOKEN_IDENT TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS
; ;
cbl_function : TOKEN_DISPLAY
| TOKEN_MOVE
| TOKEN_KEYWORD_COMPUTE
;
if_branch : TOKEN_IF booleanexpr if_branch : TOKEN_IF booleanexpr
; ;
else_parts : TOKEN_ELSE_IF booleanexpr statements else_parts : TOKEN_ELSE_IF booleanexpr simple_stmt
| TOKEN_ELSE statements | TOKEN_ELSE simple_stmt
| TOKEN_END_IF | TOKEN_END_IF
; ;
perform_stmt : TOKEN_PERFORM TOKEN_VARYING TOKEN_IDENT TOKEN_KEYWORD_FROM TOKEN_INTEGER TOKEN_KEYWORD_BY TOKEN_INTEGER TOKEN_UNTIL op_parms perform_stmt : TOKEN_PERFORM TOKEN_VARYING TOKEN_IDENT TOKEN_KEYWORD_FROM TOKEN_INTEGER TOKEN_KEYWORD_BY TOKEN_INTEGER TOKEN_UNTIL op_parms_list
| TOKEN_END_PERFORM | TOKEN_END_PERFORM
; ;
data_space : TOKEN_WORKING_STORAGE TOKEN_KEYWORD_SECTION TOKEN_DOT data_space : TOKEN_WORKING_STORAGE TOKEN_KEYWORD_SECTION TOKEN_DOT
@ -182,6 +184,8 @@ data_clauses : full_data_clause
data_declaration: simple_decl data_declaration: simple_decl
| complex_decl | complex_decl
; ;
single_op_parm : op_parm
;
%% %%
void yyerror(const char* msg) { void yyerror(const char* msg) {

View File

@ -184,8 +184,8 @@ data_category : TOKEN_ALPHANUMERIC
categry_contain : TOKEN_LEFT_PARENTHESIS TOKEN_INTEGER TOKEN_RIGHT_PARENTHESIS categry_contain : TOKEN_LEFT_PARENTHESIS TOKEN_INTEGER TOKEN_RIGHT_PARENTHESIS
| TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS | TOKEN_LEFT_PARENTHESIS TOKEN_IDENT TOKEN_RIGHT_PARENTHESIS
; ;
complete_category: data_category categry_contain complete_ctgry : data_category categry_contain
| data_category categry_contain complete_category | data_category categry_contain complete_ctgry
; ;
data_clause : TOKEN_COMPUTATION_LEVEL_0 data_clause : TOKEN_COMPUTATION_LEVEL_0
| TOKEN_COMPUTATION_LEVEL_1 | TOKEN_COMPUTATION_LEVEL_1
@ -194,21 +194,21 @@ data_clause : TOKEN_COMPUTATION_LEVEL_0
| TOKEN_KEYWORD_VALUE | TOKEN_KEYWORD_VALUE
| TOKEN_KEYWORD_OCCURS | TOKEN_KEYWORD_OCCURS
; ;
full_data_clause: data_clause data_clause full_data_clause: data_clause
| data_clause | data_clause full_data_clause
; ;
simple_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_DOT simple_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_DOT
; ;
complex_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_PICTURE category_spec TOKEN_DOT complex_decl : TOKEN_INTEGER TOKEN_IDENT TOKEN_PICTURE category_spec TOKEN_DOT
; ;
category_spec : complete_category category_spec : complete_ctgry
| complete_category data_clauses | complete_ctgry data_clauses
; ;
data_clauses : full_data_clause data_clauses : full_data_clause
| full_data_clause TOKEN_INTEGER | full_data_clause TOKEN_INTEGER
; ;
data_declaration: simple_decl data_declaration: simple_decl
| complex_decl | complex_decl``
; ;
%% %%