-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExtToInt.art
70 lines (58 loc) · 3.03 KB
/
ExtToInt.art
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
statement ::= seq^^ | assign^^ | compassign^^ | if^^ | while^^ | for^^ | println^^ | init^^ | paint^^ | translate^^ | rotate^^ | scale^^
seq ::= statement statement
assign ::= ID '='^ relExpr ';'^
compassign ::= ID '+='^ relExpr ';'^
if ::=
'if'^ '('^ relExpr ')'^ '{'^ statement '}'^ 'else'^ '{'^ statement '}'^
| 'if'^ '('^ relExpr ')'^ '{'^ statement '}'^
while ::= 'while'^ '('^ relExpr ')'^ '{'^ statement '}'^
for ::= 'for'^ '('^ statement relExpr ';'^ statement ')'^ '{'^ statement '}'^
println ::= 'println'^ '('^ printlnElem^ ')'^ ';'^
printlnElem ::= relExpr | relExpr ','^ printlnElem
init ::= 'init'^ '('^ INTEGER ','^ INTEGER ')'^ ';'^
paint ::= 'paint'^ '('^ ')'^ ';'^
translate ::= deref '.translate'^ '('^ subExpr ','^ subExpr ','^ REAL ')'^ ';'^
rotate ::= deref '.rotate'^ '('^ subExpr ','^ subExpr ','^ subExpr ')'^ ';'^
scale ::= deref '.scale'^ '('^ subExpr ','^ subExpr ','^ subExpr ')'^ ';'^
relExpr ::= subExpr^^ | eq^^ | ne^^ | gt^^ | ge^^ | lt^^ | le^^ | and^^ | or^^ | not^^ | xor^^ | '('^ relExpr^^ ')'^
eq ::= relExpr '=='^ subExpr
ne ::= relExpr '!='^ subExpr
gt ::= relExpr '>'^ subExpr
ge ::= relExpr '>='^ subExpr
lt ::= relExpr '<'^ subExpr
le ::= relExpr '<='^ subExpr
and ::= relExpr '&&'^ relExpr
or ::= relExpr '||'^ relExpr
not ::= '!'^ relExpr
xor ::= relExpr '^'^ relExpr
subExpr ::= operand^^ | sub^^ | add^^ | mul^^ | div^^ | mod^^ | neg^^ | exp^^ | '('^ subExpr^^ ')'^
sub ::= subExpr '-'^ operand
add ::= subExpr '+'^ operand
mul ::= subExpr '*'^ operand
div ::= subExpr '/'^ operand
mod ::= subExpr '%'^ operand
neg ::= '-'^ operand
exp ::= subExpr '**'^ operand
operand ::= deref^^ | INTEGER^^ | REAL^^ | STRING_DQ^^ | '('^ subExpr^^ ')'^ | box^^ | cube^^ | sphere^^ | cylinder^^ | cone^^ | torus^^ | tetrahedron^^ | pyramid^^
deref ::= ID
box ::= 'BOX'^ '('^ REAL ','^ REAL ','^ REAL ')'^
cube ::= 'CUBE'^ '('^ REAL ')'^
sphere ::= 'SPHERE'^ '('^ REAL ')'^
cylinder ::= 'CYLINDER'^ '('^ REAL ','^ REAL ')'^
cone ::= 'CONE'^ '('^ REAL ','^ REAL ')'^
torus ::= 'TORUS'^ '('^ REAL ','^ REAL ')'^
tetrahedron ::= 'TETRAHEDRON'^ '('^ REAL ')'^
pyramid ::= 'PYRAMID'^ '('^ REAL ','^ REAL ')'^
(* lexical items below this line *)
ID <leftExtent:int rightExtent:int lexeme:String v:ARTValueString> ::=
&ID^^ {ID.lexeme = artLexeme(ID.leftExtent, ID.rightExtent);
ID.v = new ARTValueString(artLexemeAsID(ID.leftExtent, ID.rightExtent)); }
INTEGER <leftExtent:int rightExtent:int lexeme:String v:ARTValueInteger32> ::=
&INTEGER^^ { INTEGER.lexeme = artLexeme(INTEGER.leftExtent, INTEGER.rightExtent);
INTEGER.v = new ARTValueInteger32(artLexemeAsInteger(INTEGER.leftExtent, INTEGER.rightExtent)); }
REAL <leftExtent:int rightExtent:int lexeme:String v:double> ::=
&REAL^^ {REAL.lexeme = artLexeme(REAL.leftExtent, REAL.rightExtent);
REAL.v = artLexemeAsReal(REAL.leftExtent, REAL.rightExtent); }
STRING_DQ <leftExtent:int rightExtent:int lexeme:String v:String> ::=
&STRING_DQ^^ {STRING_DQ.lexeme = artLexeme(STRING_DQ.leftExtent, STRING_DQ.rightExtent);
STRING_DQ.v = artLexemeAsString(STRING_DQ.leftExtent, STRING_DQ.rightExtent); }