Changeset 4113


Ignore:
Timestamp:
Dec 14, 2009, 9:37:06 PM (11 years ago)
Author:
yura
Message:
  • Refal 5 LL1-grammar.
Location:
devel-tools/trunk/LL1GrammarAnalyzers/LL1Grammars
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • devel-tools/trunk/LL1GrammarAnalyzers/LL1Grammars/Rf5LLGr.g

    r4112 r4113  
    3636%token INTERFACE IMPLEMENTATION
    3737
     38%token EXTERN ENTRY EQ
     39
    3840%%
    3941
    40 program :       IMPLEMENTATION implem
    41         |       INTERFACE interf
     42program :       /* empty */
     43        |       EXTERN extern_defs SC program
     44        |       func_def maybe_sc program
    4245        ;
    4346
    44 implem  :       module_name imports directives
     47maybe_sc
     48        :       /* empty */
     49        |       SC
    4550        ;
    4651
    47 interf  :       module_name decls
    48         ;
    49 
    50 module_name
    51         :       /* empty */
    52         |       MODULE name SC
    53         ;
    54 
    55 imports :       USE names SC imports
     52extern_defs
     53        :       name COMMA extern_defs
    5654        |       /* empty */
    5755        ;
    5856
    59 directives
    60         :       directive SC directives
    61         |       /* empty */
    62         ;
    63 
    64 directive
    65         :       decl
    66         |       func_def
    67         |       native
    68         |       trace_all
    69         ;
    70 
    71 decls   :       decl SC decls
    72         |       /* empty */
    73         ;
    74 
    75 decl    :       PUBLIC private_decl
    76         |       private_decl
    77         ;
    78 
    79 private_decl
    80         :       obj_decl
    81         |       const_decl
    82         |       func_decl
    83         ;
    84 
    85 obj_decl
    86         :       OBJ_DECL names
    87         ;
    88 
    89 const_decl
    90         :       CONST const_bindings
    91         ;
    92 
    93 const_bindings
    94         :       const_binding const_bindings_tail
    95         |       /* empty */
    96         ;
    97 
    98 const_bindings_tail
    99         :       COMMA const_binding const_bindings_tail
    100         |       /* empty */
    101         ;
    102 
    103 const_binding
    104         :       name EQL exp
    105         ;
    106 
    107 func_decl
    108         :       FUNC_DECL name exp EQL exp
    109         ;
    110 
    111 native
    112         :       NATIVE native_block
    113         ;
    114 
    115 native_block
    116         :       LCURL native_sentences RCURL
    117         |       native_sentence
    118         ;
    119 
    120 native_sentences
    121         :       native_sentence SC native_sentences
    122         |       /* empty */
    123         ;
    124 
    125 native_sentence
    126         :       name EQL name
    127         ;
    128 
    129 trace_all
    130         :       TRACE_ALL
    131         ;
    132 
    13357func_def
    134         :       name sentence
     58        :       name block
     59        |       ENTRY name block
    13560        ;
    13661
     
    13964
    14065
    141 
    142 sentence
    143         :       pattern_alt pattern_alts path_tail
    144         |       pattern rest
    145         ;
    146 
    147 path    :       source path_tail
    148         ;
    149 
    150 path_tail
    151         :       COL sentence
    152         |       iter let rest /* if nothing then no empty let and rest */
    153         ;
    154 
    155 iter    :       ITER source
    156         |       /* empty */
    157         ;
    158 
    159 let     :       LET exp
    160         |       /* empty == LET 'empty exp' */
    161         ;
    162 
    163 rest    :       COMMA path
    164         |       FENCE path
    165         |       CUT path
    166         |       ERROR path
    167         |       EQL path
    168         |       NOT source rest
    169         |       FAIL
    170         |       TRAP path WITH sentence
    171         |       /* empty == COMMA 'empty exp' */
    172         ;
    173 
    174 source  :       alt pattern_alts
    175         |       exp pattern_alts
    176         ;
    177 
    178 pattern_alts
    179         :       COL_CURL pattern_alt pattern_alts
    180         |       /* empty */
    181         ;
    182 
    183 pattern :       MATCH_DIR exp
    184         |       exp
    185         ;
    186 
    187 
    188 pattern_alt
     66block
    18967        :       LCURL sentences RCURL
    19068        ;
    19169
    19270sentences
    193         :       sentence SC sentences
    194         |       /* empty */
     71        :       /* empty */
     72        |       sentence sc_sentences
    19573        ;
    19674
    197 alt     :       LCURL paths RCURL
     75sc_sentences
     76        :       /* empty */
     77        |       SC sentences
    19878        ;
    19979
    200 paths   :       path SC paths
    201         |       /* empty */
     80sentence
     81        :       exp conditions
     82        ;
     83
     84conditions
     85        :       COMMA exp COL conditions2
     86        |       EQ exp
     87        ;
     88
     89conditions2
     90        :       exp conditions
     91        |       block   
    20292        ;
    20393
     
    20797
    20898exp
    209         :       exp_head exp
    210         |       /* empty */
     99        :       /* empty */
     100        |       exp_head exp
    211101        ;
    212102
    213103exp_head
    214         :       REF name
    215         |       static_symbol
     104        :       static_symbol
    216105        |       LPAR exp RPAR
    217106        |       VAR
     
    225114        ;
    226115
    227 names
    228         :       name names
    229         |       /* empty */
    230         ;
    231 
    232116name    :       WORD
    233117        ;
Note: See TracChangeset for help on using the changeset viewer.