Changeset 3786 for applications/trunk


Ignore:
Timestamp:
May 26, 2008, 2:03:27 AM (13 years ago)
Author:
orlov
Message:
  • LL(1) grammar for LFC.
Location:
applications/trunk/LFC
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • applications/trunk/LFC/lfc.grammar

    • Property svn:keywords set to Author Date Id Revision
    r3785 r3786  
    1 /* $Id$ */
     1/* $Id$
     2 *
     3 * This is LL(1) grammar for LFC based on the "Introduction to LFC Programming
     4 * Language" (January 25, 2008) by Zhen Lixiao
     5 */
    26
    3 %token SC COMMA
     7%token SC COLON COMMA
     8%token DEC VAR DEF
     9%token ASTERISK TO EQ
    410%token LPAR RPAR
    511%token IDENTIFIER STRING UNDEFINED
     
    1016%%
    1117
    12 program : exp ;
     18program : function_dec var_dec_and_func_def ;
    1319
     20function_dec : DEC funname COLON function_type ;
     21
     22var_dec_and_func_def : variable_dec definition
     23                     | definition
     24                     ;
     25
     26variable_dec : VAR vars_decl variable_dec_rest ;
     27
     28vars_decl : variable_list COLON concept_name SC ;
     29
     30variable_dec_rest : /*empty*/
     31                  | vars_decl variable_dec_rest
     32                  ;
     33
     34variable_list : variable variable_list_rest ;
     35
     36variable_list_rest : /*empty*/
     37                   | COMMA variable variable_list_rest
     38                   ;
     39
     40definition : DEF equation equation_rest ;
     41
     42equation : funname LPAR pattern_list RPAR EQ exp_with_where SC ;
     43
     44equation_rest : /*empty*/
     45              | equation equation_rest
     46              ;
     47
     48pattern_list : pattern pattern_list_rest ;
     49
     50pattern : STRING pat_concat
     51        | variable pat_concat
     52        ;
     53
     54pat_concat : /*empty*/
     55           | CONCAT pattern
     56           ;
     57
     58pattern_list_rest : /*empty*/
     59                  | COMMA pattern pattern_list_rest
     60                  ;
     61
     62function_type : concept_name concept_list_rest TO concept_name ;
     63
     64concept_list_rest : /*empty*/
     65                  | ASTERISK concept_name concept_list_rest
     66                  ;
     67
     68concept_name : IDENTIFIER ;
     69funname  : IDENTIFIER ;
    1470variable : IDENTIFIER ;
    15 /*
    16 funname  : IDENTIFIER ;
    17 */
    1871
    19 exp : STRING exp_concat_or_where
    20     | UNDEFINED exp_concat_or_where
    21     | IDENTIFIER exp_var_or_func exp_concat_or_where
    22     | LPAR exp RPAR exp_concat_or_where
    23     | IF exp THEN exp ELSE exp exp_where
     72exp : STRING exp_concat
     73    | UNDEFINED exp_concat
     74    | IDENTIFIER exp_var_or_func exp_concat
     75    | LPAR exp_with_where RPAR exp_concat
     76    | IF exp THEN exp ELSE exp
    2477    ;
    2578
     79exp_with_where : STRING exp_concat_or_where
     80               | UNDEFINED exp_concat_or_where
     81               | IDENTIFIER exp_var_or_func exp_concat_or_where
     82               | LPAR exp_with_where RPAR exp_concat_or_where
     83               | IF exp_with_where THEN exp_with_where ELSE exp_with_where
     84               ;
     85
    2686exp_var_or_func : /*empty*/
    27                 | LPAR exp_list RPAR
     87                | LPAR arg_list RPAR
    2888                ;
    2989
    30 exp_list : /*empty*/
    31          | exp exp_list_rest
     90arg_list : /*empty*/
     91         | exp arg_list_rest
    3292         ;
    3393
    34 exp_list_rest : /*empty*/
    35               | COMMA exp exp_list_rest
     94arg_list_rest : /*empty*/
     95              | COMMA exp arg_list_rest
    3696              ;
    3797
    38 exp_concat_or_where : exp_where
    39                     | CONCAT exp
     98exp_concat : /*empty*/
     99           | CONCAT exp
     100           ;
     101
     102exp_concat_or_where : /*empty*/
     103                    | CONCAT exp_with_where
     104                    | WHERE varassign_list
    40105                    ;
    41 
    42 
    43 exp_where : /*empty*/
    44           | WHERE varassign_list
    45           ;
    46106
    47107varassign_list : variable ASSIGN exp varassign_rest ;
Note: See TracChangeset for help on using the changeset viewer.