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

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