1443 lines
65 KiB
EBNF
1443 lines
65 KiB
EBNF
program_sequence ::= program
|
|
| nested_program
|
|
| nested_program program
|
|
.
|
|
nested_program ::= ( program | program nested_program |
|
|
nested_program program ) end_program
|
|
.
|
|
end_program ::= "END" "PROGRAM" "idstring"
|
|
.
|
|
program ::= identification_division
|
|
environment_division_opt
|
|
data_division_opt
|
|
procedure_division_opt
|
|
.
|
|
identification_division ::= "IDENTIFICATION" "DIVISION" "."
|
|
"PROGRAM-ID" "." "idstring"
|
|
programid_opts_opt "."
|
|
identification_division_options_opt
|
|
.
|
|
programid_opts_opt ::= [ opt_is ( "INITIAL" "PROGRAM" |
|
|
"COMMON" "PROGRAM" ) ]
|
|
.
|
|
identification_division_options_opt ::= { identification_division_option }
|
|
.
|
|
identification_division_option ::= ( "AUTHOR" | "DATE-WRITTEN" |
|
|
"DATE-COMPILED" | "INSTALLATION" |
|
|
"SECURITY" ) "."
|
|
.
|
|
environment_division_opt ::= [ "ENVIRONMENT" "DIVISION" "."
|
|
opt_configuration opt_input_output ]
|
|
.
|
|
opt_configuration ::= [ "CONFIGURATION" "SECTION" "."
|
|
configuration_section ]
|
|
.
|
|
configuration_section ::= { configuration_option }
|
|
.
|
|
configuration_option ::= "SOURCE-COMPUTER" "." "string"
|
|
opt_debug_mode "."
|
|
| "OBJECT-COMPUTER" "." "string"
|
|
opt_collating "."
|
|
| "SPECIAL-NAMES" "."
|
|
special_names_opt
|
|
.
|
|
opt_collating ::= [ "PROGRAM" collating_sequence ]
|
|
.
|
|
collating_sequence ::= "COLLATING" "SEQUENCE" opt_is
|
|
"string"
|
|
.
|
|
opt_debug_mode ::= [ opt_with "DEBUGGING" "MODE" ]
|
|
.
|
|
special_names_opt ::= [ special_names "." ]
|
|
.
|
|
special_names ::= { special_name }
|
|
.
|
|
special_name ::= switches_details_list
|
|
| alphabet_details
|
|
| currency_details
|
|
| decimal_point_details
|
|
| screen_status_details
|
|
| cursor_details
|
|
| special_name_class
|
|
.
|
|
currency_details ::= "CURRENCY" opt_sign opt_is
|
|
"alphanumeric-literal"
|
|
.
|
|
opt_sign ::= [ "SIGN" ]
|
|
.
|
|
special_name_class ::= "CLASS" "string" opt_is
|
|
special_name_class_item_list
|
|
.
|
|
special_name_class_item_list ::= { special_name_class_item }
|
|
special_name_class_item
|
|
.
|
|
special_name_class_item ::= "alphanumeric-literal" [ "THRU"
|
|
"alphanumeric-literal" ]
|
|
.
|
|
decimal_point_details ::= "DECIMAL-POINT" opt_is "COMMA"
|
|
.
|
|
screen_status_details ::= "CRT" "STATUS" opt_is "string"
|
|
.
|
|
cursor_details ::= "CURSOR" opt_is "string"
|
|
.
|
|
switches_details_list ::= { switches_details }
|
|
.
|
|
switches_details ::= "string" opt_is "string"
|
|
switch_on_opt switch_off_opt
|
|
.
|
|
switch_on_opt ::= [ "ON" opt_status opt_is "string" ]
|
|
.
|
|
switch_off_opt ::= [ "OFF" opt_status opt_is "string" ]
|
|
.
|
|
opt_status ::= [ "STATUS" ]
|
|
.
|
|
alphabet_details ::= "ALPHABET" "string" opt_is
|
|
alphabet_type
|
|
.
|
|
alphabet_type ::= "NATIVE"
|
|
| "STANDARD-1"
|
|
| "STANDARD-2"
|
|
| alphabet_literal_list
|
|
.
|
|
alphabet_literal_list ::= { alphabet_literal_item }
|
|
alphabet_literal_item
|
|
.
|
|
alphabet_literal_item ::= without_all_literal [ "THRU"
|
|
without_all_literal |
|
|
alphabet_also_list ]
|
|
.
|
|
alphabet_also_list ::= { "ALSO" without_all_literal }
|
|
"ALSO" without_all_literal
|
|
.
|
|
opt_input_output ::= [ "INPUT-OUTPUT" "SECTION" "."
|
|
input_output_section ]
|
|
.
|
|
input_output_section ::= file_control_paragraph
|
|
i_o_control_paragraph
|
|
.
|
|
file_control_paragraph ::= "FILE-CONTROL" "." file_control
|
|
.
|
|
i_o_control_paragraph ::= [ "I-O-CONTROL" "." i_o_control_opt
|
|
]
|
|
.
|
|
file_control ::= { file_select } file_select
|
|
.
|
|
file_select ::= "SELECT" opt_optional def_name
|
|
select_clauses "."
|
|
.
|
|
select_clauses ::= { select_clause }
|
|
.
|
|
select_clause ::= opt_organization opt_is
|
|
organization_options
|
|
| "ASSIGN" opt_to assign_clause
|
|
| "ACCESS" opt_mode opt_is
|
|
access_options
|
|
| opt_file "STATUS" opt_is "string"
|
|
| "RECORD" opt_key opt_is "string"
|
|
| "RELATIVE" opt_key opt_is "string"
|
|
| "ALTERNATE" "RECORD" opt_key opt_is
|
|
"string" with_duplicates
|
|
| "RESERVE" "numeric-literal"
|
|
opt_areas
|
|
.
|
|
opt_file ::= [ "FILE" ]
|
|
.
|
|
opt_organization ::= [ "ORGANIZATION" ]
|
|
.
|
|
assign_clause ::= "portnum"
|
|
| filename
|
|
| "portnum" filename
|
|
| "EXTERNAL" filename
|
|
.
|
|
with_duplicates ::= [ opt_with "DUPLICATES" ]
|
|
.
|
|
opt_optional ::= [ "OPTIONAL" ]
|
|
.
|
|
opt_areas ::= [ "AREA" | "AREAS" ]
|
|
.
|
|
opt_is ::= [ "IS" ]
|
|
.
|
|
opt_are ::= [ "ARE" ]
|
|
.
|
|
opt_mode ::= [ "MODE" ]
|
|
.
|
|
organization_options ::= "INDEXED"
|
|
| "SEQUENTIAL"
|
|
| "RELATIVE"
|
|
| "LINE" "SEQUENTIAL"
|
|
| anystring
|
|
.
|
|
access_options ::= "SEQUENTIAL"
|
|
| "DYNAMIC"
|
|
| "RANDOM"
|
|
| anystring
|
|
.
|
|
i_o_control_opt ::= [ i_o_control_list "." ]
|
|
.
|
|
i_o_control_list ::= { i_o_control_clause }
|
|
i_o_control_clause
|
|
.
|
|
i_o_control_clause ::= i_o_control_same_clause
|
|
|
|
|
i_o_control_multiple_file_tape_clause
|
|
.
|
|
i_o_control_same_clause ::= "SAME" same_clause_options opt_area
|
|
opt_for string_list
|
|
.
|
|
same_clause_options ::= [ "RECORD" | "SORT" | "SORT-MERGE" ]
|
|
.
|
|
i_o_control_multiple_file_tape_clause ::= "MULTIPLE" "FILE" opt_tape
|
|
opt_contains
|
|
i_o_control_multiple_file_list
|
|
.
|
|
i_o_control_multiple_file_list ::= { i_o_control_multiple_file }
|
|
i_o_control_multiple_file
|
|
.
|
|
i_o_control_multiple_file ::= "string"
|
|
i_o_control_multiple_file_position_opt
|
|
.
|
|
i_o_control_multiple_file_position_opt ::= [ "POSITION" integer ]
|
|
.
|
|
opt_tape ::= [ "TAPE" ]
|
|
.
|
|
opt_area ::= [ "AREA" ]
|
|
.
|
|
opt_for ::= [ "FOR" ]
|
|
.
|
|
string_list ::= { "string" } "string"
|
|
.
|
|
name_list ::= { variable } variable
|
|
.
|
|
data_division_opt ::= [ "DATA" "DIVISION" "."
|
|
opt_file_section opt_working_storage
|
|
opt_linkage_section
|
|
opt_report_section
|
|
opt_screen_section ]
|
|
.
|
|
opt_file_section ::= [ "FILE" "SECTION" "." file_section
|
|
]
|
|
.
|
|
opt_working_storage ::= [ "WORKING-STORAGE" "SECTION" "."
|
|
working_storage_section ]
|
|
.
|
|
opt_linkage_section ::= [ "LINKAGE" "SECTION" "."
|
|
linkage_section ]
|
|
.
|
|
opt_report_section ::= [ "REPORT" "SECTION" "."
|
|
report_section ]
|
|
.
|
|
report_section ::= { "RD" "string" report_controls "."
|
|
report_description }
|
|
.
|
|
report_controls ::= [ report_controls_control
|
|
report_controls_page |
|
|
report_controls_page
|
|
report_controls_control ]
|
|
.
|
|
report_controls_control ::= control_is_are opt_final
|
|
report_break_list
|
|
.
|
|
report_controls_page ::= "PAGE" opt_limit_is_are integer
|
|
opt_line_lines opt_heading
|
|
opt_first_detail opt_last_detail
|
|
opt_footing
|
|
.
|
|
opt_heading ::= [ "HEADING" opt_is integer ]
|
|
.
|
|
opt_line_lines ::= opt_lines
|
|
| "LINE"
|
|
.
|
|
opt_lines ::= [ "LINES" ]
|
|
.
|
|
control_is_are ::= "CONTROL" opt_is
|
|
| "CONTROLS" opt_are
|
|
.
|
|
opt_limit_is_are ::= [ "LIMIT" "IS" | "LIMITS" "ARE" ]
|
|
.
|
|
opt_footing ::= [ "FOOTING" opt_is integer ]
|
|
.
|
|
opt_last_detail ::= [ "LAST" "DETAIL" opt_is integer ]
|
|
.
|
|
opt_first_detail ::= [ "FIRST" "DETAIL" opt_is integer ]
|
|
.
|
|
opt_final ::= [ "FINAL" ]
|
|
.
|
|
report_break_list ::= { name }
|
|
.
|
|
report_description ::= { report_item } report_item
|
|
.
|
|
report_item ::= integer opt_def_name report_clauses
|
|
"."
|
|
.
|
|
report_clauses ::= { report_clause } report_clause
|
|
.
|
|
report_clause ::= report_clause_line_number
|
|
| report_clause_next_group
|
|
| report_clause_type
|
|
| report_clause_usage_display
|
|
| report_clause_picture
|
|
| report_clause_signis
|
|
| report_clause_justified
|
|
| report_clause_blank_zero
|
|
| report_clause_column_number
|
|
| report_clause_svs
|
|
| report_clause_group_indicate
|
|
.
|
|
report_clause_type ::= "TYPE" opt_is report_clause_type2
|
|
.
|
|
report_clause_type2 ::= "REPORT" "HEADING"
|
|
| "PAGE" "HEADING"
|
|
| "CONTROL" "HEADING" opt_name_final
|
|
| "DETAIL"
|
|
| "CONTROL" "FOOTING" opt_name_final
|
|
| "PAGE" "FOOTING"
|
|
| "REPORT" "FOOTING"
|
|
| "RH"
|
|
| "PH"
|
|
| "CH" opt_name_final
|
|
| "DE"
|
|
| "CF" opt_name_final
|
|
| "PF"
|
|
| "RF"
|
|
.
|
|
report_clause_signis ::= [ "SIGN" opt_is ] leading_trailing
|
|
"SEPARATE" opt_character
|
|
.
|
|
report_clause_picture ::= "PICTURE" opt_is picture
|
|
.
|
|
report_clause_usage_display ::= [ "USAGE" opt_is ] "DISPLAY"
|
|
.
|
|
report_clause_justified ::= "JUSTIFIED" opt_right
|
|
.
|
|
report_clause_next_group ::= "NEXT" "GROUP" opt_is
|
|
integer_on_next_page
|
|
.
|
|
report_clause_line_number ::= "LINE" opt_number opt_is ( integer
|
|
"ON" "NEXT" "PAGE" | integer "NEXT"
|
|
"PAGE" | integer | "PLUS" integer )
|
|
.
|
|
report_clause_column_number ::= "COLUMN" opt_number opt_is integer
|
|
.
|
|
report_clause_svs ::= "SOURCE" opt_is gname_page_counter
|
|
| "VALUE" opt_is literal
|
|
| "SUM" gname_list opt_upon opt_reset
|
|
.
|
|
gname_page_counter ::= gname
|
|
| "PAGE-COUNTER"
|
|
.
|
|
report_clause_group_indicate ::= [ "GROUP" opt_indicate ]
|
|
.
|
|
report_clause_blank_zero ::= "BLANK" opt_when "ZEROS"
|
|
.
|
|
opt_indicate ::= [ "INDICATE" ]
|
|
.
|
|
opt_upon ::= [ "UPON" gname_list ]
|
|
.
|
|
opt_reset ::= [ "RESET" ( gname | "FINAL" ) ]
|
|
.
|
|
opt_number ::= [ "NUMBER" ]
|
|
.
|
|
leading_trailing ::= "LEADING"
|
|
| "TRAILING"
|
|
.
|
|
opt_right ::= [ "RIGHT" ]
|
|
.
|
|
opt_name_final ::= gname
|
|
| "FINAL"
|
|
.
|
|
integer_on_next_page ::= integer
|
|
| "PLUS" integer
|
|
| "NEXT" "PAGE"
|
|
.
|
|
opt_of ::= [ "OF" ]
|
|
.
|
|
opt_screen_section ::= [ "SCREEN" "SECTION" "."
|
|
screen_section ]
|
|
.
|
|
screen_section ::= { screen_item }
|
|
.
|
|
screen_item ::= integer opt_def_name screen_clauses
|
|
"."
|
|
.
|
|
screen_clauses ::= { ( "LINE" opt_number_is
|
|
opt_plus_minus name_or_lit |
|
|
"COLUMN" opt_number_is
|
|
opt_plus_minus name_or_lit |
|
|
screen_attrib | "FOREGROUND-COLOR"
|
|
name_or_lit | "BACKGROUND-COLOR"
|
|
name_or_lit | "COLOR" name_or_lit |
|
|
screen_source_destination |
|
|
value_is_are gliteral | pictures |
|
|
"SIZE" name_or_lit ) }
|
|
.
|
|
screen_source_destination ::= "USING" name_or_lit
|
|
| "FROM" name_or_lit screen_to_name
|
|
| "TO" name
|
|
.
|
|
screen_to_name ::= [ "TO" name ]
|
|
.
|
|
screen_attrib ::= "BLANK" "SCREEN"
|
|
| "BLANK" "LINE"
|
|
| "ERASE" "EOL"
|
|
| "ERASE" "EOS"
|
|
| "ERASE"
|
|
| opt_with "BELL"
|
|
| sign_clause
|
|
| "FULL"
|
|
| "REQUIRED"
|
|
| "SECURE"
|
|
| "AUTO"
|
|
| "JUSTIFIED" "RIGHT"
|
|
| "JUSTIFIED" "LEFT"
|
|
| "BLINK"
|
|
| "REVERSE-VIDEO"
|
|
| "UNDERLINE"
|
|
| "LOWLIGHT"
|
|
| "HIGHLIGHT"
|
|
| "BLANK" opt_when "ZEROS"
|
|
| opt_with "NO-ECHO"
|
|
| opt_with "UPDATE"
|
|
| opt_with "NO" "ADVANCING"
|
|
| "UPPER"
|
|
| "LOWER"
|
|
.
|
|
sign_clause ::= opt_sign_is ( "LEADING" opt_separate
|
|
| "TRAILING" opt_separate )
|
|
.
|
|
opt_separate ::= [ "SEPARATE" opt_character ]
|
|
.
|
|
opt_character ::= [ "CHARACTER" ]
|
|
.
|
|
opt_sign_is ::= [ "SIGN" ] opt_is
|
|
.
|
|
opt_plus_minus ::= [ "PLUS" | "+" | "MINUS" | "-" ]
|
|
.
|
|
opt_number_is ::= [ "NUMBER" opt_is ]
|
|
.
|
|
file_section ::= { ( "FD" "string"
|
|
file_description_fd_clauses "."
|
|
file_description | "SD" "string"
|
|
file_description_sd_clauses "."
|
|
file_description ) }
|
|
.
|
|
file_description ::= { field_description }
|
|
field_description
|
|
.
|
|
field_description ::= integer opt_def_name data_clauses
|
|
"."
|
|
.
|
|
data_clauses ::= { ( data_clause | redefines_clause )
|
|
}
|
|
.
|
|
redefines_clause ::= "REDEFINES" redefines_var
|
|
.
|
|
redefines_var ::= "variable"
|
|
| "subscripted-variable"
|
|
.
|
|
data_clause ::= array_options
|
|
| pictures
|
|
| usage_option
|
|
| sign_clause
|
|
| value_option
|
|
| "SYNCHRONIZED" sync_options
|
|
| "JUSTIFIED" sync_options
|
|
| opt_is "EXTERNAL"
|
|
| opt_is "GLOBAL"
|
|
| "BLANK" opt_when "ZEROS"
|
|
| "RENAMES" variable opt_thru_gname
|
|
.
|
|
sync_options ::= [ "LEFT" | "RIGHT" ]
|
|
.
|
|
opt_thru_gname ::= [ "THRU" variable ]
|
|
.
|
|
array_options ::= "OCCURS" integer ( opt_TIMES
|
|
opt_indexed_by | "TO" integer
|
|
opt_TIMES "DEPENDING" opt_on gname
|
|
opt_indexed_by )
|
|
.
|
|
opt_key_is ::= [ "DESCENDING" opt_key opt_is
|
|
"string" ]
|
|
.
|
|
opt_indexed_by ::= [ opt_key_is "INDEXED" opt_by
|
|
index_name_list ]
|
|
.
|
|
index_name_list ::= { def_name } def_name
|
|
.
|
|
usage_option ::= opt_USAGE opt_is usage
|
|
.
|
|
usage ::= "usage-type"
|
|
| "DISPLAY"
|
|
| "POINTER"
|
|
.
|
|
value_option ::= value_is_are value_list
|
|
.
|
|
value_is_are ::= "VALUE" opt_is
|
|
| "VALUES" opt_are
|
|
.
|
|
value_list ::= { value opt_comma } value
|
|
.
|
|
value ::= gliteral [ "THRU" gliteral ]
|
|
.
|
|
pictures ::= "PICTURE" opt_is picture
|
|
.
|
|
picture ::= { pic_elem }
|
|
.
|
|
pic_elem ::= "picture-char" opt_multiplier
|
|
.
|
|
opt_multiplier ::= [ "numeric-literal" ]
|
|
.
|
|
file_description_fd_clauses ::= { file_description_fd_clause }
|
|
.
|
|
file_description_sd_clauses ::= { file_description_sd_clause }
|
|
.
|
|
file_description_fd_clause ::= opt_is "EXTERNAL"
|
|
| opt_is "GLOBAL"
|
|
| file_description_clause_block
|
|
| file_description_clause_record
|
|
| file_description_clause_label
|
|
| file_description_clause_value
|
|
| file_description_clause_data
|
|
| file_description_clause_report
|
|
| file_description_clause_linage
|
|
| file_description_clause_code_set
|
|
.
|
|
file_description_sd_clause ::= file_description_clause_record
|
|
| file_description_clause_data
|
|
.
|
|
file_description_clause_block ::= "BLOCK" opt_contains integer
|
|
opt_to_integer opt_chars_or_recs
|
|
.
|
|
file_description_clause_record ::= "RECORD" ( opt_contains integer
|
|
to_rec_varying opt_characters |
|
|
opt_is "VARYING" opt_in opt_size
|
|
from_rec_varying to_rec_varying
|
|
opt_characters depend_rec_varying )
|
|
.
|
|
file_description_clause_label ::= "LABEL" record_is_are std_or_omitt
|
|
.
|
|
file_description_clause_value ::= "VALUE" "OF" "FILE-ID" opt_is
|
|
filename
|
|
.
|
|
file_description_clause_data ::= "DATA" record_is_are var_strings
|
|
.
|
|
file_description_clause_report ::= report_is_are "string"
|
|
.
|
|
file_description_clause_code_set ::= "CODE-SET" opt_is "string"
|
|
.
|
|
file_description_clause_linage ::= "LINAGE" opt_is data_name opt_lines
|
|
file_description_clause_linage_footing
|
|
file_description_clause_linage_top
|
|
file_description_clause_linage_bottom
|
|
.
|
|
file_description_clause_linage_footing ::= [ opt_with "FOOTING" opt_at
|
|
data_name opt_lines ]
|
|
.
|
|
file_description_clause_linage_top ::= [ opt_at "TOP" data_name opt_lines ]
|
|
.
|
|
file_description_clause_linage_bottom ::= [ opt_at "BOTTOM" data_name ]
|
|
.
|
|
report_is_are ::= "REPORT" opt_is
|
|
| "REPORTS" opt_are
|
|
.
|
|
var_strings ::= { "string" } "string"
|
|
.
|
|
opt_chars_or_recs ::= [ "CHARACTERS" | "RECORDS" ]
|
|
.
|
|
opt_to_integer ::= [ "TO" integer ]
|
|
.
|
|
depend_rec_varying ::= [ "DEPENDING" opt_on "string" ]
|
|
.
|
|
from_rec_varying ::= [ opt_from nliteral ]
|
|
.
|
|
opt_from ::= [ "FROM" ]
|
|
.
|
|
to_rec_varying ::= [ "TO" nliteral ]
|
|
.
|
|
record_is_are ::= "RECORD" opt_is
|
|
| "RECORDS" opt_are
|
|
.
|
|
std_or_omitt ::= "STANDARD"
|
|
| "OMITTED"
|
|
.
|
|
opt_USAGE ::= [ "USAGE" ]
|
|
.
|
|
opt_TIMES ::= [ "TIMES" ]
|
|
.
|
|
opt_when ::= [ "WHEN" ]
|
|
.
|
|
opt_contains ::= [ "CONTAINS" ]
|
|
.
|
|
opt_characters ::= [ "CHARACTERS" ]
|
|
.
|
|
opt_order ::= [ "ORDER" ]
|
|
.
|
|
working_storage_section ::= { field_description }
|
|
.
|
|
linkage_section ::= { field_description }
|
|
.
|
|
procedure_division_opt ::= [ "PROCEDURE" "DIVISION"
|
|
using_parameters "."
|
|
declaratives_opt procedure_division
|
|
]
|
|
.
|
|
procedure_division ::= { procedure_decl }
|
|
.
|
|
procedure_decl ::= procedure_section
|
|
| paragraph
|
|
| statements "."
|
|
| "."
|
|
.
|
|
declaratives_opt ::= [ "DECLARATIVES" "."
|
|
declaratives_procedure
|
|
declaratives_division "END"
|
|
"DECLARATIVES" "." ]
|
|
.
|
|
declaratives_division ::= { declaratives_decl }
|
|
.
|
|
declaratives_decl ::= declaratives_procedure
|
|
| paragraph
|
|
| statements "."
|
|
.
|
|
declaratives_procedure ::= procedure_section use_phrase
|
|
.
|
|
use_phrase ::= "USE" "AFTER"
|
|
use_phrase_exception_error
|
|
"PROCEDURE" opt_on use_phrase_option
|
|
"."
|
|
.
|
|
use_phrase_exception_error ::= "EXCEPTION"
|
|
| "ERROR"
|
|
| "STANDARD" "EXCEPTION"
|
|
| "STANDARD" "ERROR"
|
|
.
|
|
use_phrase_option ::= gname_list
|
|
| open_mode
|
|
.
|
|
procedure_section ::= "paragraph-name" "SECTION" "."
|
|
.
|
|
paragraph ::= "paragraph-name" dot_or_eos
|
|
.
|
|
dot_or_eos ::= "."
|
|
| "."
|
|
.
|
|
statement_list ::= statements
|
|
.
|
|
statements ::= { statement } statement
|
|
.
|
|
statement ::= move_statement
|
|
| initialize_statement
|
|
| compute_statement
|
|
| add_statement
|
|
| subtract_statement
|
|
| multiply_statement
|
|
| divide_statement
|
|
| accept_statement
|
|
| display_statement
|
|
| open_statement
|
|
| close_statement
|
|
| read_statement
|
|
| return_statement
|
|
| release_statement
|
|
| write_statement
|
|
| rewrite_statement
|
|
| delete_statement
|
|
| start_statement
|
|
| perform_statement
|
|
| goto_statement
|
|
| exit_statement
|
|
| stoprun_statement
|
|
| call_statement
|
|
| chain_statement
|
|
| set_statement
|
|
| sort_statement
|
|
| merge_statement
|
|
| inspect_statement
|
|
| string_statement
|
|
| unstring_statement
|
|
| initiate_statement
|
|
| generate_statement
|
|
| terminate_statement
|
|
| proto_statement
|
|
| trace_statement
|
|
| goback_statement
|
|
| cancel_statement
|
|
| unlock_statement
|
|
| if_statement
|
|
| evaluate_statement
|
|
| search_statement
|
|
.
|
|
perform_statement ::= "PERFORM" perform_options
|
|
.
|
|
if_statement ::= if_part ( opt_end_if | "ELSE"
|
|
conditional_statement opt_end_if )
|
|
.
|
|
search_statement ::= "SEARCH" ( search opt_end_search |
|
|
"ALL" search_all opt_end_search )
|
|
.
|
|
evaluate_statement ::= "EVALUATE" selection_subject_set
|
|
when_case_list end_evaluate_or_eos
|
|
.
|
|
end_evaluate_or_eos ::= "END-EVALUATE"
|
|
| "."
|
|
.
|
|
selection_subject_set ::= { selection_subject "ALSO" }
|
|
selection_subject
|
|
.
|
|
selection_subject ::= expr
|
|
| condition
|
|
| "TRUE"
|
|
| "FALSE"
|
|
.
|
|
when_case_list ::= [ when_case_list ] "WHEN" when_case
|
|
sentence_or_nothing
|
|
.
|
|
when_case ::= selection_object
|
|
| when_case "ALSO" selection_object
|
|
| "OTHER"
|
|
.
|
|
selection_object ::= "ANY"
|
|
| "TRUE"
|
|
| "FALSE"
|
|
| opt_not expr
|
|
| opt_not expr "THRU" expr
|
|
| opt_not cond_name
|
|
.
|
|
sentence_or_nothing ::= [ conditional_statement ]
|
|
.
|
|
if_part ::= "IF" condition opt_end_then
|
|
conditional_statement
|
|
.
|
|
conditional_statement ::= statement_list
|
|
| "NEXT" "SENTENCE"
|
|
| "CONTINUE"
|
|
.
|
|
opt_not ::= [ "NOT" ]
|
|
.
|
|
opt_end_if ::= [ "END-IF" ]
|
|
.
|
|
opt_end_then ::= [ "THEN" ]
|
|
.
|
|
search ::= variable_indexed search_opt_varying
|
|
search_opt_at_end search_when_list
|
|
.
|
|
search_all ::= variable_indexed search_opt_at_end
|
|
search_all_when_list
|
|
.
|
|
search_opt_varying ::= [ "VARYING" variable ]
|
|
.
|
|
search_opt_at_end ::= [ opt_at "END" statement_list ]
|
|
.
|
|
search_when_list ::= { search_when } search_when
|
|
.
|
|
search_when ::= "WHEN" search_when_conditional
|
|
search_when_statement
|
|
.
|
|
search_when_statement ::= statement_list
|
|
| "NEXT" "SENTENCE"
|
|
| "CONTINUE"
|
|
.
|
|
search_when_conditional ::= name_or_lit extended_cond_op
|
|
name_or_lit
|
|
.
|
|
search_all_when_list ::= { search_all_when } search_all_when
|
|
.
|
|
search_all_when ::= "WHEN" search_all_when_conditional
|
|
search_all_when_statement
|
|
.
|
|
search_all_when_statement ::= statement_list
|
|
| "NEXT" "SENTENCE"
|
|
| "CONTINUE"
|
|
.
|
|
search_all_when_conditional ::= variable opt_is "condition-name"
|
|
opt_to variable
|
|
| variable opt_is "condition-name"
|
|
opt_to literal
|
|
| search_all_when_conditional "AND"
|
|
search_all_when_conditional
|
|
.
|
|
opt_end_search ::= [ "END-SEARCH" ]
|
|
.
|
|
unlock_statement ::= "UNLOCK" name
|
|
.
|
|
proto_statement ::= ( "TCOB-PROTOTYPE1" |
|
|
"TCOB-PROTOTYPE2" gname ) gname
|
|
.
|
|
trace_statement ::= ( "READY" | "RESET" ) "TRACE"
|
|
.
|
|
initiate_statement ::= "INITIATE" name
|
|
.
|
|
generate_statement ::= "GENERATE" name
|
|
.
|
|
terminate_statement ::= "TERMINATE" name
|
|
.
|
|
cancel_statement ::= "CANCEL" ( gname | "ALL" )
|
|
.
|
|
sort_statement ::= "SORT" name sort_keys
|
|
sort_duplicates_opt
|
|
sort_collating_opt sort_input
|
|
sort_output
|
|
.
|
|
sort_duplicates_opt ::= [ opt_with "DUPLICATES" opt_in
|
|
opt_order ]
|
|
.
|
|
sort_collating_opt ::= [ collating_sequence ]
|
|
.
|
|
merge_statement ::= "MERGE" name sort_keys
|
|
sort_collating_opt merge_using
|
|
sort_output
|
|
.
|
|
merge_using ::= [ "USING" sort_file_list ]
|
|
.
|
|
move_statement ::= "MOVE" [ gname "TO" var_list |
|
|
"CORRESPONDING" gname "TO" gname |
|
|
"LENGTH" "OF" gname "TO" name ]
|
|
.
|
|
initialize_statement ::= "INITIALIZE" [ var_list ]
|
|
.
|
|
compute_statement ::= "COMPUTE" [ compute_body
|
|
opt_end_compute ]
|
|
.
|
|
compute_body ::= var_list_name "condition-name" expr
|
|
[ opt_on_size_error ]
|
|
.
|
|
opt_end_compute ::= [ "END-COMPUTE" ]
|
|
.
|
|
add_statement ::= "ADD" [ add_body opt_end_add ]
|
|
.
|
|
add_body ::= var_list_gname "TO" var_list_name
|
|
opt_on_size_error
|
|
| var_list_gname opt_add_to "GIVING"
|
|
var_list_name opt_on_size_error
|
|
| var_list_gname "TO" var_list_name
|
|
| var_list_gname opt_add_to "GIVING"
|
|
var_list_name
|
|
| "CORRESPONDING" var_list_gname "TO"
|
|
var_list_name opt_rounded
|
|
opt_on_size_error
|
|
| "CORRESPONDING" var_list_gname "TO"
|
|
var_list_name opt_rounded
|
|
.
|
|
opt_add_to ::= [ "TO" gname ]
|
|
.
|
|
opt_end_add ::= [ "END-ADD" ]
|
|
.
|
|
subtract_statement ::= "SUBTRACT" [ subtract_body
|
|
opt_end_subtract ]
|
|
.
|
|
subtract_body ::= var_list_gname "FROM" var_list_name
|
|
| var_list_gname "FROM" gname "GIVING"
|
|
var_list_name
|
|
| var_list_gname "FROM" var_list_name
|
|
opt_on_size_error
|
|
| var_list_gname "FROM" gname "GIVING"
|
|
var_list_name opt_on_size_error
|
|
| "CORRESPONDING" var_list_gname
|
|
"FROM" var_list_name opt_rounded
|
|
opt_on_size_error
|
|
| "CORRESPONDING" var_list_gname
|
|
"FROM" var_list_name opt_rounded
|
|
.
|
|
opt_end_subtract ::= [ "END-SUBTRACT" ]
|
|
.
|
|
multiply_statement ::= "MULTIPLY" [ multiply_body
|
|
opt_end_multiply ]
|
|
.
|
|
multiply_body ::= gname "BY" ( gname "GIVING"
|
|
var_list_name | var_list_name |
|
|
gname "GIVING" var_list_name
|
|
opt_on_size_error | var_list_name
|
|
opt_on_size_error )
|
|
.
|
|
opt_end_multiply ::= [ "END-MULTIPLY" ]
|
|
.
|
|
divide_statement ::= "DIVIDE" [ divide_body
|
|
opt_end_divide ]
|
|
.
|
|
divide_body ::= gname ( "BY" gname "GIVING"
|
|
var_list_name | "BY" gname "GIVING"
|
|
name opt_rounded "REMAINDER" name |
|
|
"INTO" gname "GIVING" name
|
|
opt_rounded "REMAINDER" name |
|
|
"INTO" gname "GIVING" var_list_name
|
|
| "INTO" var_list_name | "BY" gname
|
|
"GIVING" var_list_name
|
|
opt_on_size_error | "BY" gname
|
|
"GIVING" name opt_rounded
|
|
"REMAINDER" name opt_on_size_error |
|
|
"INTO" gname "GIVING" name
|
|
opt_rounded "REMAINDER" name
|
|
opt_on_size_error | "INTO" gname
|
|
"GIVING" var_list_name
|
|
opt_on_size_error | "INTO"
|
|
var_list_name opt_on_size_error )
|
|
.
|
|
opt_end_divide ::= [ "END-DIVIDE" ]
|
|
.
|
|
accept_statement ::= accept_hardware
|
|
| accept_chronological
|
|
| accept_screen
|
|
| "ACCEPT"
|
|
.
|
|
accept_hardware ::= "ACCEPT" name "FROM" ( "INKEY"
|
|
opt_end_accept | "INPUT" "STATUS"
|
|
opt_end_accept | "COMMAND-LINE"
|
|
opt_end_accept |
|
|
"ENVIRONMENT-VARIABLE"
|
|
"alphanumeric-literal"
|
|
opt_end_accept )
|
|
.
|
|
accept_chronological ::= "ACCEPT" name "FROM" "TIME"
|
|
opt_end_accept
|
|
.
|
|
accept_screen ::= "ACCEPT" name accept_display_options
|
|
( opt_end_accept | opt_on
|
|
"EXCEPTION" variable statement_list
|
|
opt_end_accept )
|
|
.
|
|
opt_end_accept ::= [ "END-ACCEPT" ]
|
|
.
|
|
display_statement ::= display_line
|
|
| display_screen
|
|
| "DISPLAY"
|
|
.
|
|
display_line ::= "DISPLAY" display_varlist
|
|
display_upon display_line_options
|
|
opt_end_display
|
|
.
|
|
display_screen ::= "DISPLAY" display_varlist
|
|
accept_display_options
|
|
opt_end_display
|
|
.
|
|
display_varlist ::= { gname opt_sep } gname
|
|
.
|
|
display_upon ::= "UPON" ( "CONSOLE" | "STD-OUTPUT" |
|
|
"STD-ERROR" )
|
|
.
|
|
display_line_options ::= { ( opt_with "NO" "ADVANCING" |
|
|
"ERASE" | "ERASE" "EOS" | "ERASE"
|
|
"EOL" | "ERASE" "SCREEN" ) }
|
|
.
|
|
opt_end_display ::= [ "END-DISPLAY" ]
|
|
.
|
|
scr_line ::= "LINE" expr
|
|
.
|
|
scr_position ::= ( "COLUMN" | "POSITION" ) expr
|
|
.
|
|
scr_line_position ::= "AT" "numeric-literal"
|
|
.
|
|
accept_display_options ::= { accept_display_option }
|
|
.
|
|
accept_display_option ::= screen_attrib
|
|
| scr_line
|
|
| scr_position
|
|
| scr_line_position
|
|
.
|
|
open_statement ::= "OPEN" [ open_options ]
|
|
.
|
|
open_options ::= { open_mode open_varlist } open_mode
|
|
open_varlist
|
|
.
|
|
open_mode ::= "INPUT"
|
|
| "I-O"
|
|
| "OUTPUT"
|
|
| "EXTEND"
|
|
.
|
|
open_varlist ::= { name opt_sep } name
|
|
.
|
|
close_statement ::= "CLOSE" [ close_files ]
|
|
.
|
|
close_files ::= { close_file opt_sep } close_file
|
|
.
|
|
close_file ::= name close_options_opt
|
|
.
|
|
close_options_opt ::= close_options
|
|
| opt_with_lock
|
|
.
|
|
close_options ::= opt_with "NO" "REWIND"
|
|
| "REEL"
|
|
| "UNIT"
|
|
| "REEL" opt_for "REMOVAL"
|
|
| "UNIT" opt_for "REMOVAL"
|
|
.
|
|
opt_with_lock ::= [ opt_with ( "LOCK" | "IGNORE"
|
|
"LOCK" ) ]
|
|
.
|
|
return_statement ::= "RETURN" [ return_body
|
|
opt_end_return ]
|
|
.
|
|
return_body ::= name opt_record opt_read_into [
|
|
opt_read_at_end ]
|
|
.
|
|
read_statement ::= "READ" [ read_body opt_end_read ]
|
|
.
|
|
read_body ::= name opt_read_next opt_record
|
|
opt_read_into opt_with_lock
|
|
opt_read_key [ opt_read_at_end |
|
|
opt_read_invalid_key ]
|
|
.
|
|
opt_read_next ::= [ "NEXT" | "PREVIOUS" ]
|
|
.
|
|
opt_read_into ::= [ "INTO" name ]
|
|
.
|
|
opt_read_key ::= [ "KEY" opt_is name ]
|
|
.
|
|
opt_read_at_end ::= [ "NOT" opt_at | "AT" | "AT" on_end
|
|
"NOT" opt_at | on_end "NOT" opt_at ]
|
|
on_end
|
|
.
|
|
on_end ::= "END" statement_list
|
|
.
|
|
opt_read_invalid_key ::= read_invalid_key
|
|
| read_not_invalid_key
|
|
| read_invalid_key
|
|
read_not_invalid_key
|
|
.
|
|
read_invalid_key ::= "INVALID" opt_key statement_list
|
|
.
|
|
read_not_invalid_key ::= "NOT" "INVALID" opt_key
|
|
statement_list
|
|
.
|
|
opt_end_read ::= [ "END-READ" ]
|
|
.
|
|
opt_end_return ::= [ "END-RETURN" ]
|
|
.
|
|
release_statement ::= "RELEASE" name opt_release_from
|
|
.
|
|
opt_release_from ::= [ "FROM" gname ]
|
|
.
|
|
write_statement ::= "WRITE" name opt_write_from
|
|
write_options opt_invalid_key
|
|
opt_end_write
|
|
.
|
|
opt_write_from ::= [ "FROM" gname ]
|
|
.
|
|
write_options ::= [ before_after opt_advancing ( gname
|
|
opt_line_lines | "PAGE" ) ]
|
|
.
|
|
opt_end_write ::= [ "END-WRITE" ]
|
|
.
|
|
rewrite_statement ::= "REWRITE" name opt_write_from
|
|
opt_invalid_key opt_end_rewrite
|
|
.
|
|
opt_end_rewrite ::= [ "END-REWRITE" ]
|
|
.
|
|
delete_statement ::= "DELETE" name opt_record
|
|
opt_invalid_key opt_end_delete
|
|
.
|
|
opt_end_delete ::= [ "END-DELETE" ]
|
|
.
|
|
start_statement ::= "START" start_body opt_invalid_key
|
|
opt_end_start
|
|
.
|
|
start_body ::= name [ "KEY" opt_is cond_op name ]
|
|
.
|
|
opt_end_start ::= [ "END-START" ]
|
|
.
|
|
goto_statement ::= "GO" opt_to goto_label_list
|
|
opt_goto_depending_on
|
|
.
|
|
goto_label_list ::= { label [ "," ] } label
|
|
.
|
|
opt_goto_depending_on ::= [ "DEPENDING" opt_on variable ]
|
|
.
|
|
call_statement ::= "CALL" [ gname using_options
|
|
returning_options
|
|
on_exception_or_overflow
|
|
on_not_exception opt_end_call ]
|
|
.
|
|
chain_statement ::= "CHAIN" [ gname using_options
|
|
on_exception_or_overflow
|
|
opt_end_chain ]
|
|
.
|
|
exit_statement ::= "EXIT" [ "PROGRAM" ]
|
|
.
|
|
stoprun_statement ::= "STOP" "RUN"
|
|
.
|
|
goback_statement ::= "GOBACK"
|
|
.
|
|
var_list_name ::= [ var_list_name ] name opt_rounded
|
|
opt_sep
|
|
.
|
|
var_list_gname ::= { gname opt_sep } gname opt_sep
|
|
.
|
|
opt_rounded ::= [ "ROUNDED" ]
|
|
.
|
|
opt_on_size_error ::= [ [ opt_on "SIZE" on_size_error ]
|
|
"NOT" ] opt_on "SIZE" on_size_error
|
|
.
|
|
on_size_error ::= "ERROR" statement_list
|
|
.
|
|
opt_size ::= [ "SIZE" ]
|
|
.
|
|
opt_end_call ::= [ "END-CALL" ]
|
|
.
|
|
opt_end_chain ::= [ "END-CHAIN" ]
|
|
.
|
|
sort_input ::= "INPUT" "PROCEDURE" opt_is
|
|
perform_range
|
|
| "USING" sort_file_list
|
|
.
|
|
sort_output ::= "OUTPUT" "PROCEDURE" opt_is
|
|
perform_range
|
|
| "GIVING" sort_file_list
|
|
.
|
|
sort_file_list ::= { name } name
|
|
.
|
|
set_statement ::= "SET" set_list
|
|
.
|
|
set_list ::= set_target "TO" opt_address_of
|
|
set_variable_or_nlit
|
|
| set_target "UP" "BY" var_or_nliteral
|
|
| set_target "DOWN" "BY"
|
|
var_or_nliteral
|
|
| opt_address_of variable "TO"
|
|
opt_address_of set_variable
|
|
.
|
|
set_target ::= name_list
|
|
| cond_name
|
|
.
|
|
set_variable ::= variable
|
|
| "NULL"
|
|
.
|
|
set_variable_or_nlit ::= name_or_lit
|
|
| "ON"
|
|
| "OFF"
|
|
| "NULL"
|
|
| "TRUE"
|
|
.
|
|
opt_address_of ::= [ "ADDRESS" opt_of ]
|
|
.
|
|
string_statement ::= "STRING" string_from_list "INTO"
|
|
name string_with_pointer
|
|
opt_on_overflow opt_end_stringcmd
|
|
.
|
|
unstring_statement ::= "UNSTRING" name unstring_delimited
|
|
"INTO" unstring_destinations
|
|
string_with_pointer
|
|
unstring_tallying opt_on_overflow
|
|
opt_end_unstring
|
|
.
|
|
unstring_delimited ::= [ "DELIMITED" opt_by
|
|
unstring_delimited_vars ]
|
|
.
|
|
unstring_delimited_vars ::= { opt_all gname "OR" } opt_all gname
|
|
.
|
|
unstring_destinations ::= { unstring_dest_var opt_sep }
|
|
unstring_dest_var
|
|
.
|
|
unstring_dest_var ::= name opt_unstring_delim
|
|
opt_unstring_count
|
|
.
|
|
opt_unstring_delim ::= [ "DELIMITER" opt_in name ]
|
|
.
|
|
opt_unstring_count ::= [ "COUNT" opt_in name ]
|
|
.
|
|
unstring_tallying ::= [ "TALLYING" opt_in name ]
|
|
.
|
|
opt_all ::= [ "ALL" ]
|
|
.
|
|
opt_on_overflow ::= on_overflow on_not_overflow
|
|
.
|
|
on_exception_or_overflow ::= [ opt_on exception_or_overflow
|
|
statement_list ]
|
|
.
|
|
exception_or_overflow ::= "EXCEPTION"
|
|
| "OVERFLOW"
|
|
.
|
|
on_not_exception ::= [ "NOT" opt_on "EXCEPTION"
|
|
statement_list ]
|
|
.
|
|
on_overflow ::= [ opt_on "OVERFLOW" statement_list ]
|
|
.
|
|
on_not_overflow ::= [ not_excep opt_on "OVERFLOW"
|
|
statement_list ]
|
|
.
|
|
opt_invalid_key ::= [ opt_invalid_key_sentence |
|
|
opt_not_invalid_key_sentence |
|
|
opt_invalid_key_sentence
|
|
opt_not_invalid_key_sentence ]
|
|
.
|
|
opt_invalid_key_sentence ::= "INVALID" opt_key statement_list
|
|
.
|
|
opt_not_invalid_key_sentence ::= not_excep "INVALID" opt_key
|
|
statement_list
|
|
.
|
|
not_excep ::= NOTEXCEP
|
|
| "NOT"
|
|
.
|
|
string_with_pointer ::= [ opt_with "POINTER" name ]
|
|
.
|
|
string_from_list ::= { string_from opt_sep } string_from
|
|
.
|
|
string_from ::= gname [ "DELIMITED" opt_by
|
|
delimited_by ]
|
|
.
|
|
delimited_by ::= gname
|
|
| "SIZE"
|
|
.
|
|
opt_end_stringcmd ::= [ "END-STRING" ]
|
|
.
|
|
opt_end_unstring ::= [ "END-UNSTRING" ]
|
|
.
|
|
inspect_statement ::= "INSPECT" name ( tallying_clause
|
|
replacing_clause | converting_clause
|
|
)
|
|
.
|
|
converting_clause ::= "CONVERTING" noallname "TO"
|
|
noallname inspect_before_after
|
|
.
|
|
tallying_clause ::= [ "TALLYING" tallying_list ]
|
|
.
|
|
tallying_list ::= { name "FOR" tallying_for_list }
|
|
.
|
|
tallying_for_list ::= { ( "CHARACTERS"
|
|
inspect_before_after | "ALL"
|
|
noallname inspect_before_after |
|
|
"LEADING" noallname
|
|
inspect_before_after ) }
|
|
.
|
|
replacing_clause ::= [ "REPLACING" replacing_list ]
|
|
.
|
|
replacing_list ::= { ( "CHARACTERS" "BY" noallname
|
|
inspect_before_after |
|
|
replacing_kind replacing_by_list ) }
|
|
.
|
|
replacing_by_list ::= { noallname "BY" noallname
|
|
inspect_before_after }
|
|
.
|
|
replacing_kind ::= "ALL"
|
|
| "LEADING"
|
|
| "TRAILING"
|
|
| "FIRST"
|
|
.
|
|
inspect_before_after ::= { ( "BEFORE" opt_initial noallname |
|
|
"AFTER" opt_initial noallname ) }
|
|
.
|
|
opt_initial ::= [ "INITIAL" ]
|
|
.
|
|
sort_keys ::= { opt_on "DESCENDING" opt_key
|
|
sort_keys_names }
|
|
.
|
|
sort_keys_names ::= { name } name
|
|
.
|
|
expr ::= gname
|
|
| expr "*" expr
|
|
| expr "/" expr
|
|
| expr "+" expr
|
|
| expr "-" expr
|
|
| expr "**" expr
|
|
| "(" expr ")"
|
|
.
|
|
opt_expr ::= [ expr ]
|
|
.
|
|
using_options ::= [ "USING" dummy parm_list ]
|
|
.
|
|
returning_options ::= [ ( "RETURNING" | "GIVING" )
|
|
variable ]
|
|
.
|
|
dummy ::=
|
|
.
|
|
using_parameters ::= [ ( "USING" | "CHAINING" ) var_list
|
|
]
|
|
.
|
|
var_list ::= { gname opt_sep } gname
|
|
.
|
|
parm_list ::= { parameter opt_sep } parameter
|
|
.
|
|
parameter ::= [ opt_by parm_type ] gname
|
|
.
|
|
parm_type ::= "REFERENCE"
|
|
| "VALUE"
|
|
| "CONTENT"
|
|
.
|
|
intrinsic_parm_list ::= { intrinsic_parm opt_sep }
|
|
intrinsic_parm
|
|
.
|
|
intrinsic_parm ::= gname
|
|
.
|
|
perform_range ::= label opt_perform_thru
|
|
.
|
|
perform_options ::= perform_statements "END-PERFORM"
|
|
| gname "TIMES" perform_statements
|
|
"END-PERFORM"
|
|
| opt_with_test "UNTIL" condition
|
|
perform_statements "END-PERFORM"
|
|
| opt_with_test "VARYING" name "FROM"
|
|
gname opt_by gname "UNTIL" condition
|
|
opt_perform_after perform_statements
|
|
"END-PERFORM"
|
|
| label opt_perform_thru
|
|
| label opt_perform_thru opt_with_test
|
|
"UNTIL" condition
|
|
| label opt_perform_thru gname "TIMES"
|
|
| label opt_perform_thru opt_with_test
|
|
"VARYING" name "FROM" gname opt_by
|
|
gname "UNTIL" condition
|
|
opt_perform_after
|
|
.
|
|
opt_perform_thru ::= [ "THRU" label ]
|
|
.
|
|
opt_with_test ::= [ opt_with "TEST" before_after ]
|
|
.
|
|
opt_perform_after ::= [ "AFTER" perform_after [ "AFTER"
|
|
perform_after [ "AFTER"
|
|
perform_after [ "AFTER"
|
|
perform_after [ "AFTER"
|
|
perform_after [ "AFTER"
|
|
perform_after ] ] ] ] ] ]
|
|
.
|
|
perform_after ::= name "FROM" gname opt_by gname
|
|
"UNTIL" condition
|
|
.
|
|
perform_statements ::= statement_list
|
|
| "CONTINUE"
|
|
.
|
|
before_after ::= "BEFORE"
|
|
| "AFTER"
|
|
.
|
|
condition ::= expr extended_cond_op opt_expr
|
|
| "NOT" condition
|
|
| condition "AND" implied_op_condition
|
|
| condition "OR" implied_op_condition
|
|
| "(" condition ")"
|
|
| cond_name
|
|
.
|
|
implied_op_condition ::= condition
|
|
| cond_op expr
|
|
| expr
|
|
.
|
|
sign_condition ::= "POSITIVE"
|
|
| "NEGATIVE"
|
|
| "ZEROS"
|
|
.
|
|
class_condition ::= "NUMERIC"
|
|
| "ALPHABETIC"
|
|
| "ALPHABETIC-LOWER"
|
|
| "ALPHABETIC-UPPER"
|
|
.
|
|
extended_cond_op ::= [ "IS" | "IS" "NOT" | "IS" ext_cond
|
|
"OR" | "NOT" opt_is | ext_cond "OR"
|
|
] ext_cond
|
|
.
|
|
ext_cond ::= conditional
|
|
| class_condition
|
|
| sign_condition
|
|
.
|
|
cond_op ::= [ "NOT" | conditional "OR" ]
|
|
conditional
|
|
.
|
|
conditional ::= "condition-name" opt_than_to
|
|
.
|
|
opt_comma ::= [ "," ]
|
|
.
|
|
opt_sep ::= [ "," ]
|
|
.
|
|
opt_key ::= [ "KEY" ]
|
|
.
|
|
opt_advancing ::= [ "ADVANCING" ]
|
|
.
|
|
opt_than_to ::= [ "TO" | "THAN" ]
|
|
.
|
|
opt_record ::= [ "RECORD" ]
|
|
.
|
|
opt_at ::= [ "AT" ]
|
|
.
|
|
opt_in ::= [ "IN" ]
|
|
.
|
|
in_of ::= "IN"
|
|
| "OF"
|
|
.
|
|
opt_by ::= [ "BY" ]
|
|
.
|
|
opt_with ::= [ "WITH" ]
|
|
.
|
|
opt_on ::= [ "ON" ]
|
|
.
|
|
opt_gname ::= [ gname ]
|
|
.
|
|
opt_to ::= [ "TO" ]
|
|
.
|
|
gname_list ::= { gname } gname
|
|
.
|
|
gname ::= name
|
|
| gliteral
|
|
| "FUNCTION" "paragraph-name" "("
|
|
intrinsic_parm_list ")"
|
|
| "FUNCTION" "paragraph-name"
|
|
.
|
|
name_or_lit ::= name
|
|
| literal
|
|
.
|
|
noallname ::= name
|
|
| without_all_literal
|
|
.
|
|
gliteral ::= without_all_literal
|
|
| all_literal
|
|
.
|
|
without_all_literal ::= literal
|
|
| special_literal
|
|
.
|
|
all_literal ::= "ALL" ( literal | special_literal )
|
|
.
|
|
special_literal ::= "SPACES"
|
|
| "ZEROS"
|
|
| "QUOTES"
|
|
| "HIGH-VALUES"
|
|
| "LOW-VALUES"
|
|
.
|
|
var_or_nliteral ::= variable
|
|
| nliteral
|
|
.
|
|
nliteral ::= signed_nliteral
|
|
.
|
|
literal ::= signed_nliteral
|
|
| "alphanumeric-literal"
|
|
.
|
|
signed_nliteral ::= [ "+" | "-" ] "numeric-literal"
|
|
.
|
|
opt_def_name ::= [ def_name ]
|
|
.
|
|
def_name ::= "string"
|
|
| "FILLER"
|
|
.
|
|
variable_indexed ::= "subscripted-variable"
|
|
.
|
|
filename ::= literal
|
|
| "string"
|
|
.
|
|
data_name ::= literal
|
|
| "string"
|
|
.
|
|
cond_name ::= "condition-variable" [ "("
|
|
subscripts ")" ]
|
|
.
|
|
name ::= variable [ "(" gname ":" opt_gname
|
|
")" ]
|
|
.
|
|
variable ::= qualified_var [ ")" subscripts ")" ]
|
|
.
|
|
qualified_var ::= unqualified_var { in_of
|
|
unqualified_var }
|
|
.
|
|
unqualified_var ::= "variable"
|
|
| "subscripted-variable"
|
|
.
|
|
subscripts ::= { subscript opt_comma } subscript
|
|
.
|
|
subscript ::= { gname ( "+" | "-" ) } gname
|
|
.
|
|
integer ::= signed_nliteral
|
|
.
|
|
label ::= "paragraph-name" in_of
|
|
"paragraph-name"
|
|
| "paragraph-name"
|
|
| "numeric-literal"
|
|
| "numeric-literal" in_of
|
|
"numeric-literal"
|
|
| "numeric-literal" in_of
|
|
"paragraph-name"
|
|
.
|
|
anystring ::= "string"
|
|
| "paragraph-name"
|
|
.
|