aboutsummaryrefslogtreecommitdiffstats
path: root/src/pascal.lalrpop
diff options
context:
space:
mode:
Diffstat (limited to 'src/pascal.lalrpop')
-rw-r--r--src/pascal.lalrpop656
1 files changed, 0 insertions, 656 deletions
diff --git a/src/pascal.lalrpop b/src/pascal.lalrpop
deleted file mode 100644
index 3e44611..0000000
--- a/src/pascal.lalrpop
+++ /dev/null
@@ -1,656 +0,0 @@
-grammar;
-
-pub file: () = {
- program,
- module,
-};
-
-program: () = {
- program_heading semicolon block ".",
-};
-
-program_heading: () = {
- "PROGRAM" identifier,
- "PROGRAM" identifier "(" identifier_list ")",
-};
-
-identifier_list: () = {
- identifier_list comma identifier,
- identifier,
-};
-
-block: () = {
- label_declaration_part constant_definition_part type_definition_part variable_declaration_part procedure_and_function_declaration_part statement_part,
-};
-
-module: () = {
- constant_definition_part type_definition_part variable_declaration_part procedure_and_function_declaration_part,
-};
-
-label_declaration_part: () = {
- "LABEL" label_list semicolon,
- () ,
-};
-
-label_list: () = {
- label_list comma label,
- label,
-};
-
-label: () = {
- r"\d+",
-};
-
-constant_definition_part: () = {
- "CONST" constant_list,
- () ,
-};
-
-constant_list: () = {
- constant_list constant_definition,
- constant_definition,
-};
-
-constant_definition: () = {
- identifier "=" cexpression semicolon,
-};
-
-cexpression: () = {
- csimple_expression,
- csimple_expression relop csimple_expression,
-};
-
-csimple_expression: () = {
- cterm,
- csimple_expression addop cterm,
-};
-
-cterm: () = {
- cfactor,
- cterm mulop cfactor,
-};
-
-cfactor: () = {
- sign cfactor,
- cexponentiation,
-};
-
-cexponentiation: () = {
- cprimary,
- cprimary "**" cexponentiation,
-};
-
-cprimary: () = {
- identifier,
- "(" cexpression ")",
- unsigned_constant,
- "NOT" cprimary,
-};
-
-constant: () = {
- non_string,
- sign non_string,
- r"'[^']*'",
-};
-
-sign: () = {
- "+",
- "-",
-};
-
-non_string: () = {
- r"\d+",
- identifier,
- r"\d+\.\d+",
-};
-
-type_definition_part: () = {
- "TYPE" type_definition_list,
- () ,
-};
-
-type_definition_list: () = {
- type_definition_list type_definition,
- type_definition,
-};
-
-type_definition: () = {
- identifier "=" type_denoter semicolon,
-};
-
-type_denoter: () = {
- identifier,
- new_type,
-};
-
-new_type: () = {
- new_ordinal_type,
- new_structured_type,
- new_pointer_type,
-};
-
-new_ordinal_type: () = {
- enumerated_type,
- subrange_type,
-};
-
-enumerated_type: () = {
- "(" identifier_list ")",
-};
-
-subrange_type: () = {
- constant ".." constant,
-};
-
-new_structured_type: () = {
- structured_type,
- "PACKED" structured_type,
-};
-
-structured_type: () = {
- array_type,
- record_type,
- set_type,
- file_type,
-};
-
-array_type: () = {
- "ARRAY" "[" index_list "]" "OF" component_type,
-};
-
-index_list: () = {
- index_list comma index_type,
- index_type,
-};
-
-index_type: () = {
- ordinal_type,
-};
-
-ordinal_type: () = {
- new_ordinal_type,
- identifier,
-};
-
-component_type: () = {
- type_denoter,
-};
-
-record_type: () = {
- "RECORD" record_section_list "END",
- "RECORD" record_section_list semicolon variant_part "END",
- "RECORD" variant_part "END",
-};
-
-record_section_list: () = {
- record_section_list semicolon record_section,
- record_section,
-};
-
-record_section: () = {
- identifier_list ":" type_denoter,
-};
-
-variant_part: () = {
- "CASE" variant_selector "OF" variant_list semicolon,
- "CASE" variant_selector "OF" variant_list,
- () ,
-};
-
-variant_selector: () = {
- tag_field ":" tag_type,
- tag_type,
-};
-
-variant_list: () = {
- variant_list semicolon variant,
- variant,
-};
-
-variant: () = {
- case_constant_list ":" "(" record_section_list ")",
- case_constant_list ":" "(" record_section_list semicolon variant_part ")",
- case_constant_list ":" "(" variant_part ")",
-};
-
-case_constant_list: () = {
- case_constant_list comma case_constant,
- case_constant,
-};
-
-case_constant: () = {
- constant,
- constant ".." constant,
-};
-
-tag_field: () = {
- identifier,
-};
-
-tag_type: () = {
- identifier,
-};
-
-set_type: () = {
- "SET" "OF" base_type,
-};
-
-base_type: () = {
- ordinal_type,
-};
-
-file_type: () = {
- "PFILE" "OF" component_type,
-};
-
-new_pointer_type: () = {
- "^" domain_type,
-};
-
-domain_type: () = {
- identifier,
-};
-
-variable_declaration_part: () = {
- "VAR" variable_declaration_list semicolon,
- () ,
-};
-
-variable_declaration_list: () = {
- variable_declaration_list semicolon variable_declaration,
- variable_declaration,
-};
-
-variable_declaration: () = {
- identifier_list ":" type_denoter,
-};
-
-procedure_and_function_declaration_part: () = {
- proc_or_func_declaration_list semicolon,
- () ,
-};
-
-proc_or_func_declaration_list: () = {
- proc_or_func_declaration_list semicolon proc_or_func_declaration,
- proc_or_func_declaration,
-};
-
-proc_or_func_declaration: () = {
- procedure_declaration,
- function_declaration,
-};
-
-procedure_declaration: () = {
- procedure_heading semicolon directive,
- procedure_heading semicolon procedure_block,
-};
-
-procedure_heading: () = {
- procedure_identification,
- procedure_identification formal_parameter_list,
-};
-
-directive: () = {
- "FORWARD",
- "EXTERNAL",
-};
-
-formal_parameter_list: () = {
- "(" formal_parameter_section_list ")",
-};
-
-formal_parameter_section_list: () = {
- formal_parameter_section_list semicolon formal_parameter_section,
- formal_parameter_section,
-};
-
-formal_parameter_section: () = {
- value_parameter_specification,
- variable_parameter_specification,
- procedural_parameter_specification,
- functional_parameter_specification,
-};
-
-value_parameter_specification: () = {
- identifier_list ":" identifier,
-};
-
-variable_parameter_specification: () = {
- "VAR" identifier_list ":" identifier,
-};
-
-procedural_parameter_specification: () = {
- procedure_heading,
-};
-
-functional_parameter_specification: () = {
- function_heading,
-};
-
-procedure_identification: () = {
- "PROCEDURE" identifier,
-};
-
-procedure_block: () = {
- block,
-};
-
-function_declaration: () = {
- function_heading semicolon directive,
- function_identification semicolon function_block,
- function_heading semicolon function_block,
-};
-
-function_heading: () = {
- "FUNCTION" identifier ":" result_type,
- "FUNCTION" identifier formal_parameter_list ":" result_type,
-};
-
-result_type: () = {
- identifier,
-};
-
-function_identification: () = {
- "FUNCTION" identifier,
-};
-
-function_block: () = {
- block,
-};
-
-statement_part: () = {
- compound_statement,
-};
-
-compound_statement: () = {
- "BEGIN" statement_sequence "END",
-};
-
-statement_sequence: () = {
- statement_sequence semicolon statement,
- statement,
-};
-
-statement: () = {
- open_statement,
- closed_statement,
-};
-
-open_statement: () = {
- label ":" non_labeled_open_statement,
- non_labeled_open_statement,
-};
-
-closed_statement: () = {
- label ":" non_labeled_closed_statement,
- non_labeled_closed_statement,
-};
-
-non_labeled_closed_statement: () = {
- assignment_statement,
- procedure_statement,
- goto_statement,
- compound_statement,
- case_statement,
- repeat_statement,
- closed_with_statement,
- closed_if_statement,
- closed_while_statement,
- closed_for_statement,
- () ,
-};
-
-non_labeled_open_statement: () = {
- open_with_statement,
- open_if_statement,
- open_while_statement,
- open_for_statement,
-};
-
-repeat_statement: () = {
- "REPEAT" statement_sequence "UNTIL" boolean_expression,
-};
-
-open_while_statement: () = {
- "WHILE" boolean_expression "DO" open_statement,
-};
-
-closed_while_statement: () = {
- "WHILE" boolean_expression "DO" closed_statement,
-};
-
-open_for_statement: () = {
- "FOR" control_variable ":=" initial_value direction final_value "DO" open_statement,
-};
-
-closed_for_statement: () = {
- "FOR" control_variable ":=" initial_value direction final_value "DO" closed_statement,
-};
-
-open_with_statement: () = {
- "WITH" record_variable_list "DO" open_statement,
-};
-
-closed_with_statement: () = {
- "WITH" record_variable_list "DO" closed_statement,
-};
-
-open_if_statement: () = {
- "IF" boolean_expression "THEN" statement,
- "IF" boolean_expression "THEN" closed_statement "ELSE" open_statement,
-};
-
-closed_if_statement: () = {
- "IF" boolean_expression "THEN" closed_statement "ELSE" closed_statement,
-};
-
-assignment_statement: () = {
- variable_access ":=" expression,
-};
-
-variable_access: () = {
- identifier,
- indexed_variable,
- field_designator,
- variable_access "^",
-};
-
-indexed_variable: () = {
- variable_access "[" index_expression_list "]",
-};
-
-index_expression_list: () = {
- index_expression_list comma index_expression,
- index_expression,
-};
-
-index_expression: () = {
- expression,
-};
-
-field_designator: () = {
- variable_access "." identifier,
-};
-
-procedure_statement: () = {
- identifier params,
- identifier,
-};
-
-params: () = {
- "(" actual_parameter_list ")",
-};
-
-actual_parameter_list: () = {
- actual_parameter_list comma actual_parameter,
- actual_parameter,
-};
-
-actual_parameter: () = {
- expression,
- expression ":" expression,
- expression ":" expression ":" expression,
-};
-
-goto_statement: () = {
- "GOTO" label,
-};
-
-case_statement: () = {
- "CASE" case_index "OF" case_list_element_list "END",
- "CASE" case_index "OF" case_list_element_list ";" "END",
- "CASE" case_index "OF" case_list_element_list semicolon otherwisepart statement "END",
- "CASE" case_index "OF" case_list_element_list semicolon otherwisepart statement ";" "END",
-};
-
-case_index: () = {
- expression,
-};
-
-case_list_element_list: () = {
- case_list_element_list semicolon case_list_element,
- case_list_element,
-};
-
-case_list_element: () = {
- case_constant_list ":" statement,
-};
-
-otherwisepart: () = {
- "OTHERWISE",
- "OTHERWISE" ":",
-};
-
-control_variable: () = {
- identifier,
-};
-
-initial_value: () = {
- expression,
-};
-
-direction: () = {
- "TO",
- "DOWNTO",
-};
-
-final_value: () = {
- expression,
-};
-
-record_variable_list: () = {
- record_variable_list comma variable_access,
- variable_access,
-};
-
-boolean_expression: () = {
- expression,
-};
-
-expression: () = {
- simple_expression,
- simple_expression relop simple_expression,
-};
-
-simple_expression: () = {
- term,
- simple_expression addop term,
-};
-
-term: () = {
- factor,
- term mulop factor,
-};
-
-factor: () = {
- sign factor,
- exponentiation,
-};
-
-exponentiation: () = {
- primary,
- primary "**" exponentiation,
-};
-
-primary: () = {
- variable_access,
- unsigned_constant,
- function_designator,
- set_constructor,
- "(" expression ")",
- "NOT" primary,
-};
-
-unsigned_constant: () = {
- unsigned_number,
- r"'[^']*'",
- "NIL",
-};
-
-unsigned_number: () = {
- unsigned_integer,
- unsigned_real,
-};
-
-unsigned_integer: () = {
- r"\d+",
-};
-
-unsigned_real: () = {
- r"\d+\.\d+",
-};
-
-function_designator: () = {
- identifier params,
-};
-
-set_constructor: () = {
- "[" member_designator_list "]",
- "[" "]",
-};
-
-member_designator_list: () = {
- member_designator_list comma member_designator,
- member_designator,
-};
-
-member_designator: () = {
- member_designator ".." expression,
- expression,
-};
-
-addop: () = {
- "+",
- "-",
- "OR",
-};
-
-mulop: () = {
- "*",
- "/",
- "DIV",
- "MOD",
- "AND",
-};
-
-relop: () = {
- "=",
- "<>",
- "<",
- ">",
- "<=",
- ">=",
- "IN",
-};
-
-identifier: () = {
- r"[a-zA-Z][a-zA-Z0-9]*",
-};
-
-semicolon: () = {
- ";",
-};
-
-comma: () = {
- ",",
-};