source: applications/trunk/LFC/lfc.grammar @ 3786

Last change on this file since 3786 was 3786, checked in by orlov, 13 years ago
  • LL(1) grammar for LFC.
  • Property svn:keywords set to Author Date Id Revision
File size: 2.5 KB
Line 
1/* $Id: lfc.grammar 3786 2008-05-25 22:03:27Z orlov $
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 */
6
7%token SC COLON COMMA
8%token DEC VAR DEF
9%token ASTERISK TO EQ
10%token LPAR RPAR
11%token IDENTIFIER STRING UNDEFINED
12%token CONCAT
13%token IF THEN ELSE WHERE
14%token ASSIGN
15
16%%
17
18program : function_dec var_dec_and_func_def ;
19
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 ;
70variable : IDENTIFIER ;
71
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
77    ;
78
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
86exp_var_or_func : /*empty*/
87                | LPAR arg_list RPAR
88                ;
89
90arg_list : /*empty*/
91         | exp arg_list_rest
92         ;
93
94arg_list_rest : /*empty*/
95              | COMMA exp arg_list_rest
96              ;
97
98exp_concat : /*empty*/
99           | CONCAT exp
100           ;
101
102exp_concat_or_where : /*empty*/
103                    | CONCAT exp_with_where
104                    | WHERE varassign_list
105                    ;
106
107varassign_list : variable ASSIGN exp varassign_rest ;
108
109varassign_rest : /*empty*/
110               | COMMA varassign_list
111               ;
Note: See TracBrowser for help on using the repository browser.