/* -*- c -*- */ %{ #define YYERROR_VERBOSE %} // types %token NAT NAT1 RAT REAL BOOL // boolean values %token TRUE FALSE %right FUNCTIONS OPERATIONS MODULE PARAMETERS DEFINITIONS %right IMPORTS EXPORTS %token QUOTE_CONTENT %token ALL ALWAYS AS BE BY CASES CHAR %token COLON_COLON COLON_EQUAL %token COMPOSE DCL DEF %token DISTINGUISHED_LETTER DLMODULE DO DOT_DOT_DOT %token END EQUAL_EQUAL_GREATER %token ERROR ERRS EXISTS EXISTS1 %token EXIT EXT FOR FORALL FROM %token IDENTIFIER IF %token INIT INMAP INSTANTIATIONS INT %token IOTA IS_ LAMBDA %token MAP %token MK_ MU NIL %token NUMERIC_LITERAL OF OTHERS %token PIPE_PIPE %token RD RENAMED RETURN REVERSE %token SKIP SPACE_EQUAL_EQUAL ST STATE STRUCT %token TEXT_LITERAL THEN TIXE TOKEN TRAP TYPES UNDEFINED %token USELIB USING VALUES WHILE WITH WR %right LET %right U_EQUAL INVERSE EQUAL_EQUAL %right MINUS_GREATER PLUS_GREATER %right SEQ1_OF SEQ_OF SET_OF INV %left ',' // DON't like this too %right PRE POST %left '[' ']' '(' ')' // DON't like this %left IN '&' TO '|' PIPE_MINUS_GREATER THEN ELSE ELSEIF %left EQUAL_GREATER LESS_EQUAL_GREATER %left OR %left AND %left IN_SET NOT_IN_SET SUBSET PSUBSET %left '>' '=' '<' LESS_EQUAL GREATER_EQUAL EXCLAMATION_EQUAL %left UNION INTER MUNION '\\' '^' PLUS_PLUS LESS_COLON LESS_MINUS_COLON COLON_GREATER COLON_MINUS_GREATER COMP STAR_STAR %left '+' '-' %left '*' '/' DIV REM MOD %right ABS FLOOR NOT CARD POWER HD TL DINTER DUNION LEN ELEMS INDS CONC DOM RNG MERGE %right U_PLUS U_MINUS %left '~' %left '.' '\'' %% /* Document */ document: any_module_lst | definition_block_lst any_module_lst: any_module | any_module_lst any_module definition_block_lst: definition_block | definition_block_lst definition_block any_module: module | dynamic_link_module /* Modules */ module: MODULE identifier interface module_definitions END identifier module_definitions: | DEFINITIONS definition_block_lst interface: m_module_parameters m_module_parameters: m_import_definition_list | module_parameters m_import_definition_list m_import_definition_list: m_instantiation_instance_list export_definition | import_definition_list m_instantiation_instance_list export_definition m_instantiation_instance_list: export_definition | instantiation_instance_list export_definition module_parameters: PARAMETERS module_parameter_signature module_parameter_signature: parameter_signature_lst parameter_signature_lst: parameter_signature | parameter_signature_lst parameter_signature parameter_signature: parameter_types_signature | values_signature | functions_signature parameter_types_signature: TYPES identifier_lst identifier_lst: identifier | identifier_lst ',' identifier import_definition_list: IMPORTS import_definition_lst import_definition_lst: import_definition | import_definition_lst ',' import_definition import_definition: FROM identifier import_module_signature import_module_signature: ALL | import_signature_lst import_signature_lst: import_signature | import_signature_lst import_signature import_signature: import_types_signature | import_values_signature | import_functions_signature | import_operations_signature import_types_signature: TYPES type_import_lst type_import_lst: type_import | type_import_lst ';' type_import type_import: name | name RENAMED name | type_definition | type_definition RENAMED name import_values_signature: VALUES value_import_lst value_import_lst: value_import | value_import_lst ';' value_import value_import: name | name ':' type | name RENAMED name | name ':' type RENAMED name import_functions_signature: FUNCTIONS function_import_lst function_import_lst: function_import | function_import_lst ';' function_import function_import: name | name ':' function_type | name RENAMED name | name ':' function_type RENAMED name import_operations_signature: OPERATIONS operation_import_lst operation_import_lst: operation_import | operation_import_lst ';' operation_import operation_import: name | name ':' operation_type | name RENAMED name | name ':' operation_type RENAMED name instantiation_instance_list: INSTANTIATIONS instantiation_instance_lst instantiation_instance_lst: instantiation_instance | instantiation_instance_lst ',' instantiation_instance instantiation_instance: identifier AS instance instance: identifier '(' ')' import_module_signature | identifier '(' substitutions ')' import_module_signature substitutions: substitution | substitution ',' substitutions substitution: identifier MINUS_GREATER substitute substitute: basic_type | expression export_definition: EXPORTS export_module_signature export_module_signature: ALL | export_signature_lst export_signature_lst: export_signature | export_signature_lst export_signature export_signature: operations_signature | values_signature | functions_signature | export_types_signature export_types_signature: TYPES type_export_lst type_export_lst: type_export | type_export_lst ';' type_export type_export: name | STRUCT name values_signature: VALUES value_signature_lst value_signature_lst: value_signature | value_signature_lst ';' value_signature value_signature: name_list ':' type functions_signature: FUNCTIONS function_signature_lst function_signature_lst: function_signature | function_signature_lst ';' function_signature function_signature: name_list ':' function_type operations_signature: OPERATIONS operation_signature_lst operation_signature_lst: operation_signature | operation_signature_lst ';' operation_signature operation_signature: name_list ':' operation_type dynamic_link_module: DLMODULE identifier dynamic_link_interface use_signature END identifier | DLMODULE identifier dynamic_link_interface END identifier dynamic_link_interface: dynamic_link_import_definition_list dynamic_link_export_definition | dynamic_link_export_definition use_signature: USELIB text_literal dynamic_link_import_definition_list: IMPORTS dynamic_link_import_definition_lst dynamic_link_import_definition_lst: dynamic_link_import_definition | dynamic_link_import_definition_lst ',' dynamic_link_import_definition dynamic_link_import_definition: FROM identifier dynamic_link_import_types_signatures dynamic_link_import_types_signatures: TYPES name_lst name_lst: name | name_lst ';' name dynamic_link_export_definition: EXPORTS dynamic_link_export_signature_lst dynamic_link_export_signature_lst: dynamic_link_export_signature | dynamic_link_export_signature_lst dynamic_link_export_signature dynamic_link_export_signature: values_signature | functions_signature | operations_signature /* Definitions */ definition_block: type_definitions | state_definition | value_definitions | function_definitions | operation_definitions /* Type Definitions */ type_definitions: TYPES type_definition_lst type_definition_lst: type_definition | type_definition_lst ';' type_definition type_definition: identifier '=' type %prec U_EQUAL | identifier '=' type invariant %prec U_EQUAL | identifier COLON_COLON field_list | identifier COLON_COLON field_list invariant type: bracketed_type | basic_type | quote_literal | composite_type | union_type | product_type | optional_type | set_type | seq_type | map_type | partial_function_type | type_name | type_variable bracketed_type: '(' type ')' basic_type: BOOL | NAT | NAT1 | INT | RAT | REAL | CHAR | TOKEN composite_type: COMPOSE identifier OF field_list END field_list: field | field_list field field: type | identifier ':' type union_type: type '|' type_pipe_lst type_pipe_lst: type | type_pipe_lst '|' type product_type: type '*' type_asterisk_lst type_asterisk_lst: type | type_asterisk_lst '*' type optional_type: '[' type ']' set_type: SET_OF type seq_type: seq0_type | seq1_type seq0_type: SEQ_OF type seq1_type: SEQ1_OF type map_type: general_map_type | injective_map_type general_map_type: MAP type TO type injective_map_type: INMAP type TO type function_type: partial_function_type | total_function_type partial_function_type: discretionary_type MINUS_GREATER type total_function_type: discretionary_type PLUS_GREATER type discretionary_type: type | '(' ')' type_name: name type_variable: type_variable_identifier /* The State Definition */ state_definition: STATE identifier OF field_list END | STATE identifier OF field_list invariant END | STATE identifier OF field_list initialisation END | STATE identifier OF field_list invariant initialisation END invariant: INV invariant_initial_function initialisation: INIT invariant_initial_function invariant_initial_function: pattern EQUAL_EQUAL expression /* Value Definitions */ value_definitions: VALUES value_definition_lst value_definition_lst: value_definition | value_definition_lst ';' value_definition value_definition: pattern '=' expression %prec U_EQUAL | pattern ':' type '=' expression %prec U_EQUAL /* Function Definitions */ function_definitions: FUNCTIONS function_definition_lst function_definition_lst: function_definition | function_definition_lst ';' function_definition function_definition: explicit_function_definition | implicit_function_definition | extended_explicit_function_definition explicit_function_definition: identifier type_variable_list ':' function_type identifier parameters_list EQUAL_EQUAL PRE expression POST expression | identifier type_variable_list ':' function_type identifier parameters_list EQUAL_EQUAL PRE expression | identifier type_variable_list ':' function_type identifier parameters_list EQUAL_EQUAL POST expression | identifier type_variable_list ':' function_type identifier parameters_list EQUAL_EQUAL | identifier ':' function_type identifier parameters_list EQUAL_EQUAL PRE expression POST expression | identifier ':' function_type identifier parameters_list EQUAL_EQUAL PRE expression | identifier ':' function_type identifier parameters_list EQUAL_EQUAL POST expression | identifier ':' function_type identifier parameters_list EQUAL_EQUAL implicit_function_definition: identifier parameter_types identifier_type_pair_list POST expression | identifier parameter_types identifier_type_pair_list PRE expression POST expression | identifier type_variable_list parameter_types identifier_type_pair_list POST expression | identifier type_variable_list parameter_types identifier_type_pair_list PRE expression POST expression extended_explicit_function_definition: identifier parameter_types identifier_type_pair_list EQUAL_EQUAL expression |identifier type_variable_list parameter_types identifier_type_pair_list EQUAL_EQUAL expression |identifier parameter_types identifier_type_pair_list EQUAL_EQUAL expression PRE expression |identifier parameter_types identifier_type_pair_list EQUAL_EQUAL expression POST expression |identifier type_variable_list parameter_types identifier_type_pair_list EQUAL_EQUAL expression PRE expression |identifier type_variable_list parameter_types identifier_type_pair_list EQUAL_EQUAL expression POST expression |identifier parameter_types identifier_type_pair_list EQUAL_EQUAL expression PRE expression POST expression |identifier type_variable_list parameter_types identifier_type_pair_list EQUAL_EQUAL expression PRE expression POST expression type_variable_list: '[' type_variable_identifier_lst ']' type_variable_identifier_lst: type_variable_identifier | type_variable_identifier_lst ',' type_variable_identifier parameter_types: '(' ')' | '(' pattern_type_pair_list ')' identifier_type_pair_list: identifier ':' type | identifier_type_pair_list ',' identifier ':' type pattern_type_pair_list: pattern_list ':' type | pattern_type_pair_list ',' pattern_list ':' type parameters_list: parameters | parameters_list parameters parameters: '(' pattern_list ')' | '(' ')' /* Operation Definitions */ operation_definitions: OPERATIONS operation_definition_lst operation_definition_lst: operation_definition | operation_definition_lst ';' operation_definition operation_definition: explicit_operation_definition | implicit_operation_definition | extended_explicit_operation_definition explicit_operation_definition: identifier ':' operation_type identifier parameters SPACE_EQUAL_EQUAL statement | identifier ':' operation_type identifier parameters SPACE_EQUAL_EQUAL statement PRE expression | identifier ':' operation_type identifier parameters SPACE_EQUAL_EQUAL statement POST expression | identifier ':' operation_type identifier parameters SPACE_EQUAL_EQUAL statement PRE expression POST expression implicit_operation_definition: identifier parameter_types POST expression | identifier parameter_types identifier_type_pair_list POST expression | identifier parameter_types externals POST expression | identifier parameter_types PRE expression POST expression | identifier parameter_types POST expression exceptions | identifier parameter_types identifier_type_pair_list externals POST expression | identifier parameter_types identifier_type_pair_list PRE expression POST expression | identifier parameter_types identifier_type_pair_list POST expression exceptions | identifier parameter_types externals PRE expression POST expression | identifier parameter_types externals POST expression exceptions | identifier parameter_types PRE expression POST expression exceptions | identifier parameter_types identifier_type_pair_list externals PRE expression POST expression | identifier parameter_types identifier_type_pair_list PRE expression POST expression exceptions | identifier parameter_types identifier_type_pair_list externals POST expression exceptions | identifier parameter_types externals PRE expression POST expression exceptions | identifier parameter_types identifier_type_pair_list externals PRE expression POST expression exceptions extended_explicit_operation_definition: identifier parameter_types extended_explicit_operation_definition1 extended_explicit_operation_definition1: identifier_type_pair_list extended_explicit_operation_definition2 | extended_explicit_operation_definition2 extended_explicit_operation_definition2: EQUAL_EQUAL statement extended_explicit_operation_definition3 extended_explicit_operation_definition3: externals extended_explicit_operation_definition4 | extended_explicit_operation_definition4 extended_explicit_operation_definition4: PRE expression extended_explicit_operation_definition5 | extended_explicit_operation_definition5 extended_explicit_operation_definition5: POST expression extended_explicit_operation_definition6 | extended_explicit_operation_definition6 extended_explicit_operation_definition6: | exceptions operation_type: discretionary_type EQUAL_EQUAL_GREATER discretionary_type externals: EXT var_information_lst var_information_lst: var_information | var_information_lst var_information var_information: mode name_list | mode name_list ':' type mode: RD | WR exceptions: ERRS error_list error_list: my_error | error_list my_error my_error: identifier ':' expression MINUS_GREATER expression /* Expressions */ expression_list: expression | expression_list ',' expression expression: bracketed_expression | let_expression | let_be_expression | def_expression | if_expression | cases_expression | expression '+' expression | expression '-' expression | '+' expression %prec U_PLUS | '-' expression %prec U_MINUS | unary_expression | binary_expression | quantified_expression | iota_expression | set_enumeration | set_comprehension | set_range_expression | sequence_enumeration | sequence_comprehension | subsequence | map_enumeration | map_comprehension | tuple_constructor | record_constructor | record_modifier | apply | field_select | function_type_instantiation | lambda_expression | is_expression | undefined_expression | name | old_name | symbolic_literal /* Bracketed Expressions */ bracketed_expression: '(' expression ')' /* Local Binding Expressions */ let_expression: LET local_definition_lst IN expression local_definition_lst: local_definition | local_definition_lst ',' local_definition let_be_expression: LET bind BE ST expression IN expression | LET bind IN expression def_expression: DEF pattern_bind_lst IN expression pattern_bind_lst: pattern_bind '=' expression %prec U_EQUAL | pattern_bind_lst ';' pattern_bind '=' expression %prec U_EQUAL /* Conditional Expressions */ if_expression: IF expression THEN expression elseif_expression_lst ELSE expression elseif_expression_lst: elseif_expression | elseif_expression_lst elseif_expression elseif_expression: ELSEIF expression THEN expression cases_expression: CASES expression ':' cases_expression_alternatives END | CASES expression ':' cases_expression_alternatives ',' others_expression END cases_expression_alternatives: cases_expression_alternative | cases_expression_alternatives ',' cases_expression_alternative cases_expression_alternative: pattern_list MINUS_GREATER expression others_expression: OTHERS MINUS_GREATER expression /* Unary Expressions */ unary_expression: prefix_expression | map_inverse prefix_expression: unary_operator expression unary_operator: arithmetic_abs | floor | not | set_cardinality | finite_power_set | distributed_set_union | distributed_set_intersection | sequence_head | sequence_tail | sequence_length | sequence_elements | sequence_indices | distributed_sequence_concatenation | map_domain | map_range | distributed_map_merge arithmetic_abs: ABS floor: FLOOR not: NOT set_cardinality: CARD finite_power_set: POWER distributed_set_union: DUNION distributed_set_intersection: DINTER sequence_head: HD sequence_tail: TL sequence_length: LEN sequence_elements: ELEMS sequence_indices: INDS distributed_sequence_concatenation: CONC map_domain: DOM map_range: RNG distributed_map_merge: MERGE map_inverse: INVERSE expression /* Binary Expressions */ binary_expression: expression binary_operator expression binary_operator: arithmetic_multiplication | arithmetic_divide | arithmetic_integer_division | arithmetic_rem | arithmetic_mod | less_than | less_than_or_equal | greater_than | greater_than_or_equal | equal | not_equal | boolean_or | boolean_and | imply | logical_equivalence | in_set | not_in_set | subset | proper_subset | set_union | set_difference | set_intersection | sequence_concatenate | map_or_sequence_modify | map_merge | map_domain_restrict_to | map_domain_restrict_by | map_range_restrict_to | map_range_restrict_by | composition | iterate boolean_or: OR boolean_and: AND arithmetic_multiplication: '*' arithmetic_divide: '/' arithmetic_integer_division: DIV arithmetic_rem: REM arithmetic_mod: MOD less_than: '<' less_than_or_equal: LESS_EQUAL greater_than: '>' greater_than_or_equal: GREATER_EQUAL equal: '=' not_equal: EXCLAMATION_EQUAL imply: EQUAL_GREATER logical_equivalence: LESS_EQUAL_GREATER in_set: IN_SET not_in_set: NOT_IN_SET subset: SUBSET proper_subset: PSUBSET set_union: UNION set_difference: '\\' set_intersection: INTER sequence_concatenate: '^' map_or_sequence_modify: PLUS_PLUS map_merge: MUNION map_domain_restrict_to: LESS_COLON map_domain_restrict_by: LESS_MINUS_COLON map_range_restrict_to: COLON_GREATER map_range_restrict_by: COLON_MINUS_GREATER composition: COMP iterate: STAR_STAR /* Quantified Expressions */ quantified_expression: all_expression | exists_expression | exists_unique_expression all_expression: FORALL bind_list '&' expression exists_expression: EXISTS bind_list '&' expression exists_unique_expression: EXISTS1 bind '&' expression /* Iota Expression */ iota_expression: IOTA bind '&' expression /* Set Expressions */ set_enumeration: '{' '}' | '{' expression_list '}' set_comprehension: '{' expression '|' bind_list '}' | '{' expression '|' bind_list '&' expression '}' set_range_expression: '{' expression ',' DOT_DOT_DOT ',' expression '}' /* Sequence Expressions */ sequence_enumeration: '[' ']' | '[' expression_list ']' sequence_comprehension: '[' expression '|' set_bind ']' | '[' expression '|' set_bind '&' expression ']' subsequence: expression '(' expression ',' DOT_DOT_DOT ',' expression ')' /* Map Expressions */ map_enumeration: '{' maplet_lst '}' | '{' PIPE_MINUS_GREATER '}' maplet_lst: maplet | maplet_lst ',' maplet maplet: expression PIPE_MINUS_GREATER expression map_comprehension: '{' maplet '|' bind_list '}' | '{' maplet '|' bind_list '&' expression '}' /* The Tuple Constructor Expression */ // TODO: CHECK IF THIS IS THIS WAY OR ONLY EXPRESSION_LIST tuple_constructor: MK_ '(' expression expression_list ')' /* Record Expressions */ record_constructor: MK_ name '(' ')' | MK_ name '(' expression_list ')' record_modifier: MU '(' expression ',' record_modification_lst ')' record_modification_lst: record_modification | record_modification_lst ',' record_modification record_modification: identifier PIPE_MINUS_GREATER expression /* Apply Expressions */ apply: expression '(' ')' | '(' expression_list ')' field_select: expression '.' identifier /* function_type_instantiation: name '[' type_lst ']' | expression '[' type_lst ']' NOTE: If name can be an expression... set only the expression... */ function_type_instantiation: expression '[' type_lst ']' type_lst: type | type_lst ',' type /* * The Lambda Expression */ lambda_expression: LAMBDA type_bind_list '&' expression /* * The Is Expression */ is_expression: IS_ name '(' expression ')' | is_basic_type '(' expression ')' /* * The Undefined Expression */ undefined_expression: UNDEFINED /* * Names * */ name: identifier | identifier '\'' identifier name_list: name | name_list ',' name old_name: identifier '~' /* * State Designators */ state_designator: name | field_reference | map_or_sequence_reference field_reference: state_designator '.' identifier map_or_sequence_reference: state_designator '(' expression ')' /* * Statements */ statement: let_statement | let_be_statement | def_statement | block_statement | assign_statement | if_statement | cases_statement | sequence_for_loop | set_for_loop | index_for_loop | while_loop | nondeterministic_statement | call_statement | return_statement | always_statement | trap_statement | recursive_trap_statement | exit_statement | error_statement | identity_statement /* * Local Binding Statements */ let_statement: LET local_definition_lst IN statement local_definition: value_definition | function_definition let_be_statement: LET bind IN statement | LET bind BE ST expression IN statement def_statement: DEF equals_definition_lst IN statement equals_definition_lst: equals_definition | equals_definition_lst ';' equals_definition equals_definition: pattern_bind '=' expression %prec U_EQUAL /* * Block and Assignment Statements */ block_statement: '(' dcl_statement_lst statement_lst ')' statement_lst: statement | statement_lst ';' statement dcl_statement_lst: dcl_statement | dcl_statement_lst dcl_statement dcl_statement: DCL assignment_definition_lst ';' assignment_definition_lst: assignment_definition | assignment_definition_lst ',' assignment_definition assignment_definition: identifier ':' type | identifier ':' type COLON_EQUAL expression assign_statement: state_designator COLON_EQUAL expression /* * Conditional Statements */ if_statement: IF expression THEN statement elseif_statement_lst | IF expression THEN statement elseif_statement_lst ELSE statement elseif_statement_lst: elseif_statement | elseif_statement_lst elseif_statement elseif_statement: ELSEIF expression THEN statement cases_statement: CASES expression ':' cases_statement_alternatives END | CASES expression ':' cases_statement_alternatives ',' others_statement END cases_statement_alternatives: cases_statement_alternative | cases_statement_alternatives ',' cases_statement_alternative cases_statement_alternative: pattern_list MINUS_GREATER statement others_statement: OTHERS MINUS_GREATER statement /* * Loop Statements */ sequence_for_loop: FOR pattern_bind IN expression DO statement | FOR pattern_bind IN REVERSE expression DO statement set_for_loop: FOR ALL pattern IN_SET expression DO statement index_for_loop: FOR identifier '=' expression TO expression DO statement %prec U_EQUAL | FOR identifier '=' expression TO expression BY expression DO statement %prec U_EQUAL while_loop: WHILE expression DO statement /* * The Nondeterministic Statement */ nondeterministic_statement: PIPE_PIPE '(' statement_comma_lst ')' statement_comma_lst: statement | statement_comma_lst ',' statement /* * Call and Return Statements */ call_statement: name '(' ')' | name '(' expression_list ')' | name '(' ')' USING state_designator | name '(' expression_list ')' USING state_designator return_statement: RETURN expression | RETURN /* * Exception Handling Statements */ always_statement: ALWAYS statement IN statement trap_statement: TRAP pattern_bind WITH statement IN statement recursive_trap_statement: TIXE traps IN statement traps: '{' mapplet_pattern_bind_lst '}' mapplet_pattern_bind_lst: pattern_bind PIPE_MINUS_GREATER statement | mapplet_pattern_bind_lst ',' pattern_bind PIPE_MINUS_GREATER statement exit_statement: EXIT | EXIT expression /* The Error Statement */ error_statement: ERROR /* The Identity Statement */ identity_statement: SKIP /* Patterns */ pattern: pattern_identifier | match_value | set_enum_pattern | set_union_pattern | seq_enum_pattern | seq_conc_pattern | tuple_pattern | record_pattern pattern_identifier: identifier | '-' match_value: '(' expression ')' | symbolic_literal set_enum_pattern: '{' '}' | '{' pattern_list '}' set_union_pattern: pattern UNION pattern seq_enum_pattern: '[' ']' | '[' pattern_list ']' seq_conc_pattern: pattern '^' pattern tuple_pattern: MK_ '(' pattern ',' pattern_list ')' record_pattern: MK_ name '(' ')' | MK_ name '(' pattern_list ')' pattern_list: pattern | pattern_list ',' pattern /* * Bindings */ pattern_bind: pattern | bind bind: set_bind | type_bind set_bind: pattern IN_SET expression type_bind: pattern ':' type bind_list: multiple_bind | bind_list ',' multiple_bind multiple_bind: multiple_set_bind | multiple_type_bind multiple_set_bind: pattern_list IN_SET expression multiple_type_bind: pattern_list ':' type type_bind_list: type_bind | type_bind_list ',' type_bind /** THIS IS DONE ON LEX separator: newline | white_space */ identifier: IDENTIFIER type_variable_identifier: '@' identifier is_basic_type: IS_ BOOL | IS_ NAT | IS_ NAT1 | IS_ INT | IS_ RAT | IS_ REAL | IS_ CHAR | IS_ TOKEN symbolic_literal: NUMERIC_LITERAL | boolean_literal | nil_literal | character_literal | TEXT_LITERAL | quote_literal boolean_literal: TRUE | FALSE nil_literal: NIL character_literal: '\'' character_literal_content '\'' character_literal_content: QUOTE_CONTENT /* character - newline - multicharacter */ /* multi_character: Greek_letter | delimiter_character */ /* delimiter_character: ',' | LESS_EQUAL | GREATER_EQUAL | EXCLAMATION_EQUAL | MINUS_GREATER | PLUS_GREATER | EQUAL_EQUAL_GREATER | PIPE_PIPE | EQUAL_GREATER | LESS_EQUAL_GREATER | PIPE_MINUS_GREATER | LESS_COLON | COLON_GREATER | LESS_MINUS_COLON | COLON_MINUS_GREATER | EQUAL_EQUAL | STAR_STAR | PLUS_PLUS */ text_literal: TEXT_LITERAL quote_literal: distinguished_letter distinguished_letter_lst distinguished_letter_lst: | distinguished_letter_lst '_' | distinguished_letter_lst distinguished_letter /* | distinguished_letter_lst digit */ /* plain_letter: LOWERCASE_LETTER | UPCASE_LETTER*/ /* key_word_letter: LOWERCASE_LETTER*/ distinguished_letter: DISTINGUISHED_LETTER //Greek_letter: GREEK_LETTER //delimiter_character: DELIMITER_CHARACTER //other_character: OTHER_CHARACTER // newline: NEWLINE // white_space: WHITESPACE %% int vdmerror(char* s) { fprintf( stderr, "%s \n", s); } int main() { vdmparse(); }