ESLanguage部分语法

ESLanguage部分语法
  1  % token  " function "   " as "   " end " ;
  2  % token  " integer "   " string "   " bool "   " pointer " ;
  3  % token  " if "   " then "   " else " ;
  4  % token  " do "   " while " ;
  5  % token  " for "   " to "   " step "   " next " ;
  6  % token  " switch "   " case "   " default " ;
  7  % token  " call "   " return " ;
  8  % token  " dll "   " com "   " name "   " lib "   " class "   " alias " ;
  9  % token  " true "   " false " ;
 10  % token  " ; "   " , "   " + "   " - "   " * "   " / "   " = "   " [ "   " ] "   " : " ;
 11  % token  " > "   " < "   " >= "   " <= "   " == " ;
 12  % token  " not "   " and "   " or " ;
 13 
 14  % start program;
 15 
 16  var_type     ->      " integer "
 17           |      " string "
 18           |      " bool "
 19           |      " pointer "
 20          ;
 21 
 22  value_type     ->     array
 23           |      " {String} "
 24           |      " {Symbol} "
 25           |      " {digit} "
 26           |      " true "
 27           |      " false "
 28           |     function_closure
 29          ;
 30 
 31  array         ->      " {Symbol} "   " [ "  value_list  " ] "
 32          ;
 33 
 34  paramter_list     ->     paramter_list  " , "  function_closure
 35           |     paramter_list  " , "  var_type value_type
 36           |     function_closure
 37           |     var_type value_type
 38          ;
 39 
 40  value_list     ->     value_list  " , "  exp
 41           |     exp
 42          ;
 43 
 44  program         ->     item_list
 45          ;
 46 
 47  item_list     ->     item_list item
 48           |     item
 49          ;
 50 
 51  item         ->     function_desc
 52           |     define_desc
 53           |     array_desc
 54          ;
 55 
 56  stmt_list     ->     stmt_list stmt
 57           |     stmt
 58          ;
 59 
 60  stmt         ->     define_desc
 61           |     array_desc
 62           |     if_desc
 63           |     do_desc
 64           |     while_desc
 65           |     for_desc
 66           |     assign_desc
 67           |     call_desc
 68           |     switch_desc
 69           |     return_desc
 70           |     dll_desc
 71           |     com_desc
 72           |      " ; "
 73          ;
 74 
 75  function_desc     ->      " function "   " {Symbol} "   " {LQ} "   " {RQ} "   " as "  var_type stmt_list  " end "   " function "
 76           |      " function "   " {Symbol} "   " {LQ} "   " {RQ} "  stmt_list  " end "   " function "
 77           |      " function "   " {Symbol} "   " {LQ} "   " {RQ} "   " as "  var_type  " end "   " function "
 78           |      " function "   " {Symbol} "   " {LQ} "   " {RQ} "   " end "   " function "
 79           |      " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "   " as "  var_type stmt_list  " end "   " function "
 80           |      " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "  stmt_list  " end "   " function "
 81           |      " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "   " as "  var_type  " end "   " function "
 82           |      " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "   " end "   " function "
 83          ;
 84 
 85  function_closure     ->      " function "   " {LQ} "   " {RQ} "   " as "  var_type stmt_list  " end "   " function "
 86               |      " function "   " {LQ} "   " {RQ} "  stmt_list  " end "   " function "
 87               |      " function "   " {LQ} "   " {RQ} "   " as "  var_type  " end "   " function "
 88               |      " function "   " {LQ} "   " {RQ} "   " end "   " function "
 89               |      " function "   " {LQ} "  paramter_list  " {RQ} "   " as "  var_type stmt_list  " end "   " function "
 90               |      " function "   " {LQ} "  paramter_list  " {RQ} "  stmt_list  " end "   " function "
 91               |      " function "   " {LQ} "  paramter_list  " {RQ} "   " as "  var_type  " end "   " function "
 92               |      " function "   " {LQ} "  paramter_list  " {RQ} "   " end "   " function "
 93              ;
 94 
 95  define_desc     ->     define_desc  " , "   " {Symbol} "   " [ "  value_list  " ] "
 96           |     define_desc  " , "   " {Symbol} "   " [ "   " ] "
 97           |     define_desc  " , "   " {Symbol} "   " = "  value_type
 98           |     define_desc  " , "   " {Symbol} "
 99           |     var_type  " {Symbol} "   " = "  value_type
100           |     var_type  " {Symbol} "
101          ;
102 
103  array_desc     ->     array_desc  " , "   " {Symbol} "   " [ "  value_list  " ] "
104           |     array_desc  " , "   " {Symbol} "   " [ "   " ] "
105           |     array_desc  " , "   " {Symbol} "   " = "  value_type
106           |     array_desc  " , "   " {Symbol} "
107           |     var_type  " {Symbol} "   " [ "  value_list  " ] "
108           |     var_type  " {Symbol} "   " [ "   " ] "
109          ;
110 
111  if_desc         ->      " if "  exp  " then "   " else "   " end "   " if "
112           |      " if "  exp  " then "   " else "  stmt_list  " end "   " if "
113           |      " if "  exp  " then "  stmt_list  " else "   " end "   " if "
114           |      " if "  exp  " then "  stmt_list  " else "  stmt_list  " end "   " if "
115           |      " if "  exp  " then "   " end "   " if "
116           |      " if "  exp  " then "  stmt_list  " end "   " if "
117          ;
118 
119  do_desc         ->      " do "  stmt_list  " while "  exp
120           |      " do "   " while "  exp
121          ;
122 
123  while_desc     ->      " while "  exp  " do "  stmt_list  " end "   " while "
124           |      " while "  exp  " do "   " end "   " while "
125          ;
126 
127  for_desc     ->      " for "   " {Symbol} "   " = "  exp  " to "  exp  " do "  stmt_list  " next "
128           |      " for "   " {Symbol} "   " = "  exp  " to "  exp  " do "   " next "
129           |      " for "   " {Symbol} "   " = "  exp  " to "  exp  " step "  exp  " do "  stmt_list  " next "
130           |      " for "   " {Symbol} "   " = "  exp  " to "  exp  " step "  exp  " do "   " next "
131          ;
132 
133  assign_desc     ->     array  " = "  exp
134           |      " {Symbol} "   " = "  exp
135          ;
136 
137  call_desc     ->      " {Symbol} "   " {LQ} "   " {RQ} "
138           |      " {Symbol} "   " {LQ} "  value_list  " {RQ} "
139           |      " call "   " {Symbol} "   " {LQ} "   " {RQ} "
140           |      " call "   " {Symbol} "   " {LQ} "  value_list  " {RQ} "
141          ;
142 
143  switch_desc     ->      " switch "  exp  " do "  case_list  " end "   " switch "
144           |      " switch "  exp  " do "   " end "   " switch "
145          ;
146 
147  case_list     ->     case_list  " case "  exp  " : "
148           |     case_list  " default "   " : "
149           |      " case "  exp  " : "
150           |      " default "   " : "
151          ;
152 
153  return_desc     ->      " return "  function_closure
154           |      " return "  exp
155           |      " return "
156          ;
157 
158  dll_desc     ->      " dll "   " lib "   " {Symbol} "   " function "   " {Symbol} "   " {LQ} "   " {RQ} "
159           |      " dll "   " lib "   " {Symbol} "   " function "   " {Symbol} "   " alias "   " {Symbol} "   " {LQ} "   " {RQ} "
160           |      " dll "   " lib "   " {Symbol} "   " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "
161           |      " dll "   " lib "   " {Symbol} "   " function "   " {Symbol} "   " alias "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "
162          ;
163 
164  com_desc     ->      " com "   " lib "   " {Symbol} "   " class "   " {Symbol} "   " function "   " {Symbol} "   " {LQ} "   " {RQ} "
165           |      " com "   " lib "   " {Symbol} "   " class "   " {Symbol} "   " function "   " {Symbol} "   " alias "   " {Symbol} "   " {LQ} "   " {RQ} "
166           |      " com "   " lib "   " {Symbol} "   " class "   " {Symbol} "   " function "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "
167           |      " com "   " lib "   " {Symbol} "   " class "   " {Symbol} "   " function "   " {Symbol} "   " alias "   " {Symbol} "   " {LQ} "  paramter_list  " {RQ} "
168          ;
169 
170  exp         ->     exp  " > "  exp1
171           |     exp  " < "  exp1
172           |     exp  " >= "  exp1
173           |     exp  " <= "  exp1
174           |     exp  " == "  exp1
175           |     exp  " and "  exp1
176           |     exp  " or "  exp1
177           |      " not "  exp1
178           |     exp1
179          ;
180 
181  exp1         ->     exp1  " + "  exp2
182           |     exp1  " - "  exp2
183           |     exp2
184          ;
185 
186  exp2         ->     exp2  " * "  exp3
187           |     exp2  " / "  exp3
188           |     exp3
189          ;
190 
191  exp3         ->      " {LQ} "  exp  " {RQ} "
192           |     value_type
193          ;
尚未包含实数部分

你可能感兴趣的:(ESLanguage部分语法)