Commit e1521486ddc0535875e98bc5e54cd1d5d4407641

Authored by Salvador Abreu
1 parent 25cb655c
Exists in master

continue to develop AST

Showing 2 changed files with 30 additions and 13 deletions   Show diff stats
fzn-parser/README
1 1 AST nodes for fzn parser
2 2  
3   -lit(TYPE, VALUE)
  3 +TYPE : VALUE
  4 +
  5 +acceptable types:
4 6  
5   -TYPE = bool
... ...
fzn-parser/flatzinc.y
... ... @@ -31,6 +31,16 @@
31 31 printf ("_ -> %s.\n", x); \
32 32 }
33 33  
  34 +#define PRE() \
  35 +{ \
  36 + printf ("_T -> ["); \
  37 +}
  38 +
  39 +#define POST() \
  40 +{ \
  41 + printf ("|_T].\n"); \
  42 +}
  43 +
34 44 #define PUSH(x) \
35 45 { \
36 46 printf ("_T -> ["); \
... ... @@ -201,29 +211,35 @@ set_ti_expr_tail:
201 211 //---------------------------------------------------------------------------
202 212  
203 213 exprs:
204   - expr ',' exprs
  214 + expr ',' exprs { AST ("T2:E2,T1:E1", ("(T1,T2):(E1,E2)")); }
205 215 | expr
206 216  
207 217 expr:
208 218 bool_literal
209   - | INT_LITERAL { PUSH (("lit(int, %d)", $1)); }
210   - | FLOAT_LITERAL { PUSH (("lit(float, %g)", $1)); }
211   - | STRING_LITERAL { PUSH (("lit(string, \"%s\")", $1)); }
  219 + | INT_LITERAL { PUSH (("int:lit(%d)", $1.ival)); }
  220 + | FLOAT_LITERAL { PUSH (("float:lit(%g)", $1.rval)); }
  221 + | STRING_LITERAL { PUSH (("string:lit(\"%s\")", $1.sval)); }
212 222 | set_literal
213 223 | array_literal
214 224 | array_access_expr
215   - | IDENT { PUSH (("lit(float, %g)", $1)); }
216   - | UNDERSCORE_IDENT
  225 + | IDENT { PUSH (("_:id(\"%s\")", $1)); }
  226 + | UNDERSCORE_IDENT { PUSH (("_:uid(\"%s\")", $1)); }
217 227 | IDENT '(' exprs ')' /* An annotation value with > 0 arguments. */
218 228  
219 229 bool_literal:
220   - FALSE { PUSH (("lit(bool, false)")); }
221   - | TRUE { PUSH (("lit(bool, true)")); }
  230 + FALSE { PUSH (("bool:lit(false)")); }
  231 + | TRUE { PUSH (("bool:lit(true)")); }
222 232  
223 233 set_literal:
224   - '{' exprs '}' { AST ("Es", ("lit(set(_), Es)")); }
225   - | '{' '}' { PUSH (("lit(set(_), [])")); }
226   - | INT_LITERAL DOTDOT INT_LITERAL { PUSH (("lit(set(%d, %d)", $1, $3)); }
  234 + '{' exprs '}' { AST ("Ts:Es", ("set(Ts):lit(Es)")); }
  235 + | '{' '}' { PUSH (("set(_):lit([])")); }
  236 + | INT_LITERAL DOTDOT INT_LITERAL { int i;
  237 + PRE();
  238 + printf ("set(int):lit(");
  239 + for (i=$1.ival; i<$3.ival; ++i)
  240 + printf ("%d, ", i);
  241 + printf ("%d)", $3.ival);
  242 + POST(); }
227 243  
228 244 array_literal:
229 245 '[' exprs ']' { AST ("Es", ("alit(Es)")); }
... ...