-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGrammar.gals
More file actions
87 lines (73 loc) · 1.75 KB
/
Grammar.gals
File metadata and controls
87 lines (73 loc) · 1.75 KB
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
84
85
86
87
#Options
GenerateScanner = true
GenerateParser = true
Language = C#
ScannerName = Lexicon
ParserName = Syntactic
SemanticName = Semantic
Package = RMdev.Calculator.Compiler
ScannerCaseSensitive = true
ScannerTable = FULL
Input = STRING
Parser = SLR
#RegularDefinitions
ignore: [\ \s\n\r\t]+
number: [0-9]+(\.[0-9]+)?
#Tokens
: {ignore}
: /\*([^\*]|[\r\n]|(\*+([^\*/]|[\r\n])))*\*+/
: /[/][^\n]*
NUMBER: {number}
"+"
"-"
"*"
"/"
"%"
"^"
"("
")"
","
ID: [_$a-zA-Z][_$a-zA-Z0-9]*
ROOT = ID: "Root"
SQRT = ID: "Sqrt"
ABS = ID: "Abs"
AVG = ID: "Avg"
SUM = ID: "Sum"
ROUND = ID : "Round"
TRUNCATE = ID : "Truncate"
CEILING = ID : "Ceiling"
FLOOR = ID : "Floor"
SIN = ID : "Sin"
COS = ID : "Cos"
TAN = ID : "Tan"
MAX = ID : "Max"
MIN = ID : "Min"
CUSTOMFUNCTION = ID : "CustomFunction"
#NonTerminals
#Grammar
<EXP> ::= <EXP> "+" <E1> #10 | <EXP> "-" <E1> #11 | <E1>;
<E1> ::= <E1> "/" <E2> #12 | <E1> "*" <E2> #13 | <E1> "%" <E2> #14 | <E2>;
<E2> ::= <E2> "^" <E3> #15 | <E3>;
<E3> ::= "-" <E4> #16 | <E4>;
<E4> ::= <VALUE> | "(" <EXP> ")" | <FUNC>;
<VALUE> ::= ID #1 | <CONST> ;
<CONST> ::= NUMBER #0;
<FUNC> ::= ROOT "(" <EXP> "," <EXP> ")" #17;
<FUNC> ::= SQRT "(" <EXP> ")" #18;
<FUNC> ::= ABS "(" <EXP> ")" #19;
<FUNC> ::= AVG "(" #3 <PN> ")" #20;
<FUNC> ::= SUM "(" #3 <PN> ")" #21;
<FUNC> ::= SIN "(" <EXP> ")" #22;
<FUNC> ::= COS "(" <EXP> ")" #23;
<FUNC> ::= TAN "(" <EXP> ")" #24;
<FUNC> ::= TRUNCATE "(" <EXP> ")" #25;
<FUNC> ::= ROUND "(" <EXP> ")" #26;
<FUNC> ::= ROUND "(" <EXP> "," <EXP> ")" #27;
<FUNC> ::= CEILING "(" <EXP> ")" #28;
<FUNC> ::= FLOOR "(" <EXP> ")" #29;
<FUNC> ::= MAX "(" #3 <PN> ")" #30;
<FUNC> ::= MIN "(" #3 <PN> ")" #31;
<FUNC> ::= CUSTOMFUNCTION #32"(" #3 <PNOPTIONAL> ")" #33;
<PN> ::= <PN> "," <EXP> #4;
<PN> ::= <EXP> #4;
<PNOPTIONAL> ::= <PN> | î;