Seems to work
[rops.git] / parser.mly
blob27f66ff4d0d92d03f5fcf8343b818850c42a1a68
1 %{\r
2   open Types;;\r
3 %}\r
4 \r
5 %token <int> INT\r
6 %token <string> SYMBOL STRING \r
7 %token LPAREN RPAREN LBRACKET RBRACKET DOT EOF\r
8 \r
9 %start main\r
10 %type <Types.scheme_object> main\r
12 %%\r
13 main :  expr { $1 } /* exprlist EOF { List.rev $1 } */\r
14   ;\r
16 list\r
17     : LPAREN exprlist RPAREN                      {  ProperList (List.rev $2) }\r
18     | LBRACKET exprlist RBRACKET                  {  ProperList (List.rev $2) }\r
19     | LPAREN exprlist expr DOT expr RPAREN        {  ImproperList ((List.rev ($3::$2)), $5) }\r
20     | LBRACKET exprlist expr DOT expr RBRACKET    {  ImproperList ((List.rev ($3::$2)), $5) }\r
21     ;\r
23 exprlist\r
24     :                                             {  []; }\r
25     |  exprlist expr                              {  $2::$1 }\r
26     ;   \r
28 expr\r
29     : list                                        {  $1; }\r
30     | SYMBOL                                      {  Symbol $1 }\r
31     | STRING                                      {  String $1 }\r
32     | INT                                         {  Int $1; }\r
33     ;\r
34 %%\r