-
Notifications
You must be signed in to change notification settings - Fork 0
/
grammar.txt
83 lines (53 loc) · 1.27 KB
/
grammar.txt
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Expression:
bunch a bowlshit
Local variable declaration:
TYPE <pointer|array>* NAME < = [expression] >
If:
when [expression] \n [line]* end \n
While:
while [expression] \n [line]* end \n
! Function:
<private> TYPE NAME ( < [args] > ) \n [line]* end \n
! Global const:
<private> const TYPE NAME = [compile time expression]
! Package variable:
<private> TYPE NAME < = [compile time expression]>
! Struct definition:
<private> TYPENAME ( [args] )
! Package declaration:
package PACKAGE_NAME
! Module import:
import PACKAGE_NAME:MODULE_NAME
! Package import:
import PACKAGE_NAME
Comment:
-- Anything in here is commented out --
-- Test program --
package Apricot
import BloodOrange:Token
import BloodOrange:AST
private TokenWithType <Token>
int type
char pointer name
end
to start(int argn, char pointer array argv)
Token token = Token:create(Token:NUMLITERAL)
printAST(token)
int i = 4
if i < 3
...
else i < 3
...
end
end
to printAST(Token token)
int tokenToAST(int tokenType)
switch(tokenType)
case Token:NUMLITERAL
return AST:NUMLITERAL
case Token:PLUS
return AST:PLUS
end
end
printf(tokenToAST(token));
end