1
// Описание грамматики выражений
4
lex.addMarkup("\"", "\"", "\\", lex.LexemeType.Annotation);
7
lex.addMask("@BUILDING_NUMBER_MASK", lex.LexemeType.Number, 10);
12
= выражение тернарная_операция_знак_1 выражение тернарная_операция_знак_2 тернарная_операция
15
тернарная_операция_знак_1
16
= "?" { ast.addNode_StepInto(ast.op.Ternary_True, 0); }
18
тернарная_операция_знак_2
19
= ":" { ast.goParent(); ast.addNode_StepInto(ast.op.Ternary_False, 0); }
23
= тернарная_операция "||" оператор_ИЛИ
24
{ ast.addNode(ast.op.Logical_Or, 1); }
28
= оператор_ИЛИ "&&" оператор_И
29
{ ast.addNode(ast.op.Logical_And, 1); }
33
= оператор_И "==" оператор_сравнения
34
{ ast.addNode(ast.op.Compare_Equal, 1); }
35
= оператор_И "!=" оператор_сравнения
36
{ ast.addNode(ast.op.Compare_NotEqual, 1); }
37
= оператор_И "<" оператор_сравнения
38
{ ast.addNode(ast.op.Compare_Less, 1); }
39
= оператор_И "<=" оператор_сравнения
40
{ ast.addNode(ast.op.Compare_LessOrEqual, 1); }
41
= оператор_И ">" оператор_сравнения
42
{ ast.addNode(ast.op.Compare_More, 1); }
43
= оператор_И ">=" оператор_сравнения
44
{ ast.addNode(ast.op.Compare_MoreOrEqual, 1); }
47
= арифметический_оператор
48
= оператор_сравнения "+" арифметический_оператор
49
{ ast.addNode(ast.op.Arithmetic_Addition, 1); }
50
= оператор_сравнения "-" арифметический_оператор
51
{ ast.addNode(ast.op.Arithmetic_Substruction, 1); }
53
арифметический_оператор
54
= возведение_в_степень
55
= арифметический_оператор "*" возведение_в_степень
56
{ ast.addNode(ast.op.Arithmetic_Multiplication, 1); }
57
= арифметический_оператор "/" возведение_в_степень
58
{ ast.addNode(ast.op.Arithmetic_Division, 1); }
59
= арифметический_оператор "%" возведение_в_степень
60
{ ast.addNode(ast.op.Arithmetic_Modulo, 1); }
64
= возведение_в_степень "^" унарный_оператор
65
{ ast.addNode(ast.op.Arithmetic_Power, 1); }
69
= "+" величина { ast.addNode(ast.op.Unary_Plus, 0); }
70
= "-" величина { ast.addNode(ast.op.Unary_Minus, 0); }
71
= "!" величина { ast.addNode(ast.op.Unary_Not, 0); }
74
= NUMBER { ast.addNode(ast.op.Push_Constant, 0); }
75
= ANNOTATION { ast.addNode(ast.op.Push_Constant, 0); }
76
= "true" { ast.addNode(ast.op.Push_Constant, 0); }
77
= "false" { ast.addNode(ast.op.Push_Constant, 0); }
85
= "++" адрес { ast.addNode(ast.op.Iteration_PrefixPlus, 0); }
86
= "--" адрес { ast.addNode(ast.op.Iteration_PrefixMinus, 0); }
87
= адрес "++" { ast.addNode(ast.op.Iteration_PosfixPlus, 1); }
88
= адрес "--" { ast.addNode(ast.op.Iteration_PosfixMinus, 1); }
93
= адрес знак_элемента_кортежа атом
95
= адрес знак_адреса_в_массиве список_выражений "]"
99
// = знак_элемента_кортежа атом
100
// { ast.goParent(); }
102
знак_элемента_кортежа
104
// ast.addNode_Branch_StepInto(ast.op.Address_Tuple, 0);
106
ast.addNode_Branch(ast.op.Address_Tuple, 0);
109
знак_адреса_в_массиве
111
// ast.addNode_Branch_StepInto(ast.op.Address_Array, 0);
113
ast.addNode_Branch(ast.op.Address_Array, 0);
117
= ID { ast.addNode_StepInto(ast.op.Push_Id, 0); }
118
= имя_функции "(" список_выражений ")"
119
// { ast.goParent(); }
120
= имя_функции "(" ")"
121
// { ast.goParent(); }
124
= ID { ast.addNode_StepInto(ast.op.Function_Call, 0); }
128
= список_выражений "," выражение