summaryrefslogtreecommitdiff
path: root/src/ExprIntrp/ExprIntrp.yacc
blob: 8d40129f81a73ec02901dae6c562581f187df03e (plain)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
%{
extern void ExprIntrp_EndOfFuncDef();
extern void ExprIntrp_EndOfRelation();
extern void ExprIntrp_AssignVariable();
extern void ExprIntrp_EndOfAssign();
extern void ExprIntrp_Deassign();
extern void ExprIntrp_SumOperator();
extern void ExprIntrp_MinusOperator();
extern void ExprIntrp_ProductOperator();
extern void ExprIntrp_DivideOperator();
extern void ExprIntrp_ExpOperator();
extern void ExprIntrp_UnaryMinusOperator();
extern void ExprIntrp_VariableIdentifier();
extern void ExprIntrp_NumValue();
extern void ExprIntrp_EndFunction();
extern void ExprIntrp_EndDerFunction();
extern void ExprIntrp_EndDifferential();
extern void ExprIntrp_EndDiffFunction();
extern void ExprIntrp_EndFuncArg();
extern void ExprIntrp_NextFuncArg();
extern void ExprIntrp_StartFunction();
extern void ExprIntrp_DefineFunction();
extern void ExprIntrp_StartDerivate();
extern void ExprIntrp_EndDerivate();
extern void ExprIntrp_DiffVar();
extern void ExprIntrp_DiffDegree();
extern void ExprIntrp_VerDiffDegree();
extern void ExprIntrp_DiffDegreeVar();
extern void ExprIntrp_StartDifferential();
extern void ExprIntrp_StartFunction();
extern void ExprIntrp_EndFuncArg();
extern void ExprIntrp_NextFuncArg();
extern void ExprIntrp_VariableIdentifier();
extern void ExprIntrp_Derivation();
extern void ExprIntrp_EndDerivation();
extern void ExprIntrp_DerivationValue();
extern void ExprIntrp_ConstantIdentifier();
extern void ExprIntrp_ConstantDefinition();
extern void ExprIntrp_VariableIdentifier();
extern void ExprIntrp_NumValue();
extern void ExprIntrp_Sumator();
extern void ExprIntrp_VariableIdentifier();
extern void ExprIntrp_Productor();
extern void ExprIntrp_EndOfEqual();
%}

%token SUMOP MINUSOP DIVIDEOP EXPOP MULTOP PARENTHESIS BRACKET ENDPARENTHESIS ENDBRACKET VALUE IDENTIFIER COMMA DIFFERENTIAL DERIVATE DERIVKEY ASSIGNOP DEASSIGNKEY EQUALOP RELSEPARATOR CONSTKEY SUMKEY PRODKEY
%start exprentry
%left SUMOP MINUSOP
%left DIVIDEOP MULTOP
%left EXPOP
%{
%}
%%

exprentry          : GenExpr
		   | Assignment  
                   | Deassignment
		   | FunctionDefinition  {ExprIntrp_EndOfFuncDef();}
		   | RelationList {ExprIntrp_EndOfRelation();}
		   ;

Assignment         : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();}
		   ;

Deassignment       : DEASSIGNKEY BRACKET IDENTIFIER {ExprIntrp_Deassign();} ENDBRACKET
                   ;

GenExpr	           : GenExpr SUMOP  GenExpr {ExprIntrp_SumOperator();}
                   | GenExpr MINUSOP GenExpr {ExprIntrp_MinusOperator();} 
	           | GenExpr MULTOP GenExpr {ExprIntrp_ProductOperator();} 
	           | GenExpr DIVIDEOP GenExpr {ExprIntrp_DivideOperator();} 
	           | GenExpr EXPOP GenExpr {ExprIntrp_ExpOperator();} 
	           | PARENTHESIS GenExpr ENDPARENTHESIS
	           | BRACKET GenExpr ENDBRACKET
	           | MINUSOP GenExpr {ExprIntrp_UnaryMinusOperator();}
	           | SingleExpr
                   | Derivation
                   | ConstantDefinition
                   | Sumator
                   | Productor
	           ;

SingleExpr         : Single
		   | Function
		   ;


Single	           : IDENTIFIER  {ExprIntrp_VariableIdentifier();}
		   | VALUE  {ExprIntrp_NumValue();}
		   ;

Function           : funcident PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndFunction();}
                   | DerFunctionId PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDerFunction();}
                   | DiffFuncId {ExprIntrp_EndDifferential();} PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDiffFunction();}
		   ;

ListGenExpr        : GenExpr {ExprIntrp_EndFuncArg();} 
		   | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr 
		   ;

funcident          : IDENTIFIER  {ExprIntrp_StartFunction();}
		   ;

FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr
		   ;

DerFunctionId      : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();}
                   ;

DiffFuncId         : DIFFERENTIAL DiffId DIVIDEOP DIFFERENTIAL IDENTIFIER {ExprIntrp_DiffVar();}
                   | DIFFERENTIAL VALUE {ExprIntrp_DiffDegree();} DiffId DIVIDEOP DIFFERENTIAL VALUE {ExprIntrp_VerDiffDegree();} IDENTIFIER {ExprIntrp_DiffDegreeVar();}
                   ;

DiffId             : IDENTIFIER {ExprIntrp_StartDifferential();}
                   | DiffFuncId
                   ;

FunctionDef	   : IDENTIFIER {ExprIntrp_StartFunction();} BRACKET ListArg ENDBRACKET
		   ;

ListArg		   : unarg {ExprIntrp_EndFuncArg();}
		   | unarg COMMA {ExprIntrp_NextFuncArg();} ListArg
		   ;

unarg		   : IDENTIFIER {ExprIntrp_VariableIdentifier();}
		   ;

Derivation         : DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} ENDBRACKET {ExprIntrp_EndDerivation();}
                   | DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} COMMA VALUE {ExprIntrp_DerivationValue();} ENDBRACKET {ExprIntrp_EndDerivation();}
                   ;

ConstantDefinition : CONSTKEY BRACKET IDENTIFIER {ExprIntrp_ConstantIdentifier();} COMMA VALUE {ExprIntrp_ConstantDefinition();} ENDBRACKET
                   ;

Sumator            : SUMKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Sumator();}
                   ;

Productor          : PRODKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Productor();}
                   ;

RelationList	   : SingleRelation 
		   | SingleRelation RELSEPARATOR RelationList
		   | SingleRelation '\n' RelationList
		   ;

SingleRelation	   : GenExpr EQUALOP GenExpr {ExprIntrp_EndOfEqual();}
		   ;