====== Parser pascal ====== {{tag>parser DCG}} ===== Description ===== Parsing the declarative part of a Pascal block **Source**: The Art of Prolog ===== Download ===== Program source code: {{parser_pascal.pl}} ===== Listing ===== /* The grammar for the declarative part of a Pascal program. */ declarative_part --> const_declaration, type_declaration, var_declaration, procedure_declaration. % Constant declarations const_declaration --> [ ]. const_declaration --> [const], const_definition, [;], const_definitions. const_definitions --> [ ]. const_definitions --> const_definition, [;], const_definitions. const_definition --> identifier, [=], constant. identifier --> [X], {atom(X)}. constant --> [X], {constant(X)}. % Type declarations type_declaration --> [ ]. type_declaration --> [type], type_definition, [;], type_definitions. type_definitions --> [ ]. type_definitions --> type_definition, [;], type_definitions. type_definition --> identifier, [=], type. type --> ['INTEGER']. type --> ['REAL']. type --> ['BOOLEAN']. type --> ['CHAR']. % Variable declarations var_declaration --> [ ]. var_declaration --> [var], var_definition, [;], var_definitions. var_definitions --> [ ]. var_definitions --> var_definition, [;], var_definitions. var_definition --> identifiers, [:], type. identifiers --> identifier. identifiers --> identifier, [,], identifiers. % Procedure declarations procedure_declaration --> [ ]. procedure_declaration --> procedure_heading, [;], block. procedure_heading --> [procedure], identifier, formal_parameter_part. formal_parameter_part --> [ ]. formal_parameter_part --> ['('], formal_parameter_section, [')']. formal_parameter_section --> formal_parameters. formal_parameter_section --> formal_parameters, [;], formal_parameter_section. formal_parameters --> value_parameters. formal_parameters --> variable_parameters. value_parameters --> var_definition. variable_parameters --> [var], var_definition. % Program 19.3: Parsing the declarative part of a Pascal block ===== Comments =====