Next Previous Contents

5. Appendix 1 - Syntax of internal representation description language

YACC notation is used to describe full syntax of internal representation description language.


  %token PERCENTS COMMA COLON DOUBLE_COLON SEMICOLON
         IDENTIFIER CODE_INSERTION EXPRESSION ADDITIONAL_C_CODE

  %token DOUBLE EXTEND LOCAL IMPORT EXPORT TYPE ROOT ABSTRACT CLASS
         SKELETON OTHER 

  %start description

  %%

  description : declaration_part PERCENTS node_type_definition_list
                ADDITIONAL_C_CODE
              ;

  declaration_part :
                   | declaration_part DOUBLE any_node_type_name
                   | declaration_part EXTEND IDENTIFIER
                   | declaration_part predefined_types_declaration
                   | declaration_part LOCAL CODE_INSERTION
                   | declaration_part IMPORT  CODE_INSERTION
                   | declaration_part EXPORT  CODE_INSERTION
                   ;

  predefined_types_declaration : TYPE 
                               | predefined_types_declaration IDENTIFIER
                               ;

  node_type_definition_list : node_type_definition
                            | node_type_definition_list
                                 SEMICOLON  node_type_definition
                            ;

  node_type_definition :
                       | abstract_node_flag type_nodes_identifier_list
                            optional_immediate_super_type_list
                            class_field_definition_part
                            skeleton_field_definition_part
                            other_field_definition_part
                       ;

  abstract_node_flag :
                     | ABSTRACT
                     ;

  type_nodes_identifier_list : identifier_list
                             ;

  optional_immediate_super_type_list :
                                     | immediate_super_type_list
                                     ;

  immediate_super_type_list : DOUBLE_COLON any_node_type_name
                            | DOUBLE_COLON COMMA any_node_type_name
                            | immediate_super_type_list COMMA
                                any_node_type_name
                            ;

  any_node_type : ROOT
                | IDENTIFIER
                ;

  class_field_definition_part :
                              | CLASS field_definition_list
                              ;

  skeleton_field_definition_part :
                                 | SKELETON field_definition_list
                                 ;

  other_field_definition_part :
                              | OTHER field_definition_list
                              ;

  field_definition_list :
                        | field_definition_list field_definition
                        | field_definition_list constraint
                        | field_definition_list action
                        ;

  field_definition : field_identifier_list  COLON  optional_double
                       any_node_type_name
                   ;

  optional_double :
                  | DOUBLE
                  ;

  constraint : EXPRESSION
             ;

  action : CODE_INSERTION
         ;

  field_identifier_list : identifier_list
                        ;

  identifier_list : IDENTIFIER
                  | identifier_list  COMMA  IDENTIFIER
                  ;


Next Previous Contents