source: applications/trunk/LFC/lfc.grammar

Last change on this file was 3811, checked in by orlov, 12 years ago
  • UNDEFINED can't be concatenated with anything.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.6 KB
Line 
1/* $Id: lfc.grammar 3811 2008-06-13 01:01:50Z yura $
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
15%%
16
17program : function_dec var_dec_and_func_def program_rest ;
18
19program_rest : /*empty*/
20             | program
21             ;
22
23function_dec : DEC funname COLON function_type SC ;
24
25var_dec_and_func_def : variable_dec definition
26                     | definition
27                     ;
28
29variable_dec : VAR vars_decl variable_dec_rest ;
30
31vars_decl : variable_list COLON concept_name SC ;
32
33variable_dec_rest : /*empty*/
34                  | vars_decl variable_dec_rest
35                  ;
36
37variable_list : variable variable_list_rest ;
38
39variable_list_rest : /*empty*/
40                   | COMMA variable variable_list_rest
41                   ;
42
43definition : DEF equation equation_rest ;
44
45equation : funname LPAR pattern_list RPAR EQ exp_with_where_or_undef SC ;
46
47equation_rest : /*empty*/
48              | equation equation_rest
49              ;
50
51pattern_list : pattern pattern_list_rest ;
52
53pattern : STRING pat_concat
54        | variable pat_concat
55        ;
56
57pat_concat : /*empty*/
58           | CONCAT pattern
59           ;
60
61pattern_list_rest : /*empty*/
62                  | COMMA pattern pattern_list_rest
63                  ;
64
65function_type : concept_name concept_list_rest TO concept_name ;
66
67concept_list_rest : /*empty*/
68                  | ASTERISK concept_name concept_list_rest
69                  ;
70
71concept_name : IDENTIFIER ;
72funname  : IDENTIFIER ;
73variable : IDENTIFIER ;
74
75exp : STRING exp_concat
76    | IDENTIFIER exp_var_or_func exp_concat
77    | LPAR exp_with_where RPAR exp_concat
78    | IF exp THEN exp ELSE exp
79    ;
80
81exp_with_where : STRING exp_concat_or_where
82               | IDENTIFIER exp_var_or_func exp_concat_or_where
83               | LPAR exp_with_where RPAR exp_concat_or_where
84               | IF exp_with_where THEN exp_with_where ELSE exp_with_where
85               ;
86
87exp_with_where_or_undef : UNDEFINED
88                        | exp_with_where
89                        ;
90
91exp_var_or_func : /*empty*/
92                | LPAR arg_list RPAR
93                ;
94
95arg_list : /*empty*/
96         | exp arg_list_rest
97         ;
98
99arg_list_rest : /*empty*/
100              | COMMA exp arg_list_rest
101              ;
102
103exp_concat : /*empty*/
104           | CONCAT exp
105           ;
106
107exp_concat_or_where : /*empty*/
108                    | CONCAT exp_with_where
109                    | WHERE varassign_list
110                    ;
111
112varassign_list : variable EQ exp varassign_rest ;
113
114varassign_rest : /*empty*/
115               | COMMA varassign_list
116               ;
Note: See TracBrowser for help on using the repository browser.