1
/* Описание грамматики ПОЯ системы дифференциальных уравнений
4
lex.addMarkup("/*", "*/", "", lex.LexemeType.Comment);
5
lex.addMarkup("//", "", "", lex.LexemeType.Comment);
9
ast.setMode(ast.Mode.Diff);
10
ast.addNode(ast.op.Statement_Using, "math");
22
= список_уравнений уравнение
26
= use_as_type_выражение ";"
31
ast.addNode(ast.op.Statement_Using, 1);
36
= простое_уравнение ";"
37
= дифференциальное_уравнение ";"
41
= левая_часть_простого_уравнения выражение {
44
ast.setStream(ast.Stream.Default);
48
левая_часть_простого_уравнения
50
ast.addNode(ast.op.Push_Id, 0);
51
ast.addNode_StepInto(ast.op.Statement_Assign, 1);
57
ast.setStream(ast.Stream.Equation);
58
ast.addNode_StepInto(ast.op.Statement_Assign, 0);
62
дифференциальное_уравнение
63
= левая_часть_дифференциального_уравнения выражение {
66
ast.setStream(ast.Stream.Default);
70
левая_часть_дифференциального_уравнения
71
= ID символ_производной "=" {
72
ast.setPrefix("__dt_");
73
ast.addNode(ast.op.Push_Id, 0);
75
ast.addNode_StepInto(ast.op.Statement_Assign, 2);
81
ast.setStream(ast.Stream.Diff);
82
ast.addNode_StepInto(ast.op.Statement_Assign, 0);
88
= use_as_type_часть_с_типом
91
// приводит к ошибке при определённой последовательности расположении операторов use as type
92
= use_as_type_часть_с_типом ID
93
{ ast.addNode(ast.op.Statement_Id, 1); ast.goParent(); }
95
use_as_type_часть_с_типом
96
= начало_оператора_use имя_модуля "as" "type" ID
97
{ ast.addNode(ast.op.Statement_Type, 4); }
100
= "use" { ast.addNode_StepInto(ast.op.Statement_UseAsType, 0); }
103
= ANNOTATION { ast.addNode(ast.op.None, 0); }
104
= ANNOTATION "(" ANNOTATION ")"
105
{ ast.addNode_StepInto(ast.op.None, 0); ast.addNode(ast.op.None, 2); ast.goParent(); }