3
include "include/expression-sv";
6
= список_модулей { ast.addNode(ast.sbl.host, ast.sbl.op.CheckState, 0); }
11
= список_модулей модуль
16
******************************************************************************************************/
18
= начало_модуля тело_модуля "endmodule"
22
= "module" ID "(" список_сигналов ")" ";"
28
= список_сигналов "," сигнал
32
******************************************************************************************************/
34
= направление_сигнала тип_сигнала ID
36
ast.addNode(ast.sbl.host, ast.sbl.op.Declaration, 2);
37
ast.addNode(ast.sbl.host, ast.sbl.op.Announcements_Completed, 0);
39
// = направление_сигнала тип_сигнала размерности_упаковки ID
49
ast.addNode(ast.sbl.host, ast.sbl.op.PushVariable, "array");
50
ast.addNode(ast.sbl.host, ast.sbl.op.ObjectElement, "int1");
51
ast.addNode(ast.sbl.host, ast.sbl.op.FunctionCall, 0);
52
ast.addNode(ast.sbl.host, ast.sbl.op.Announcement, 0);
54
= "logic" начало_упаковки NUMBER ":" NUMBER "]"
56
ast.addNode(ast.sbl.host, ast.sbl.op.PushConstant, 2);
58
ast.addNode(ast.sbl.host, ast.sbl.op.Announcement, 0);
64
ast.addNode(ast.sbl.host, ast.sbl.op.PushVariable, "array");
65
ast.addNode(ast.sbl.host, ast.sbl.op.ObjectElement, "int");
66
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.FunctionCall, 0);
72
// = размерности_упаковки размер_шины
76
// = "[" выражение ":" выражение "]"
80
******************************************************************************************************/
91
= блок_непрерывных_присваиваний
97
/* Блок непрерывных присваиваний
98
******************************************************************************************************/
99
блок_непрерывных_присваиваний
100
= "assign" список_непрерывных_присваиваний ";"
103
список_непрерывных_присваиваний
104
= оператор_блокирующего_присваивания
105
= список_непрерывных_присваиваний "," оператор_блокирующего_присваивания
109
******************************************************************************************************/
111
= список_определений_переменных ";"
114
список_определений_переменных
115
= тип_переменной объявление_или_определение_переменной
116
= список_определений_переменных "," объявление_или_определение_переменной
121
// = тип_сигнала размерности_упаковки
124
объявление_или_определение_переменной
125
= объявление_переменной
126
{ ast.addNode(ast.sbl.host, ast.sbl.op.Announcements_Completed, 0); }
127
= объявление_переменной инициализация_переменной
128
{ ast.addNode(ast.sbl.host, ast.sbl.op.Announcements_Completed, 0); }
132
= ID { ast.addNode(ast.sbl.host, ast.sbl.op.Declaration, 0); }
135
инициализация_переменной
136
= знак_инициализации выражение
137
{ ast.goParent(); ast.addNode(ast.sbl.host, ast.sbl.op.PostInitialize, 0); }
141
= "=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.Initialize, 0); }
145
/* Комбинационный блок
146
******************************************************************************************************/
148
= начало_комбинационного_блока тело_блока
152
ast.addNode(ast.sbl.host, ast.sbl.op.FunctionDefinitionEnd, 0);
154
ast.addNode(ast.sbl.host, ast.sbl.op.PostInitialize, 0);
155
ast.addNode(ast.sbl.host, ast.sbl.op.Announcements_Completed, 0);
156
ast.addNode(ast.sbl.host, ast.sbl.op.FunctionTethered, 0);
162
{ ast.addNode(ast.sbl.host, ast.sbl.op.None, 0); }
163
= "begin" список_операторов "end"
164
{ ast.addNode(ast.sbl.host, ast.sbl.op.None, 2); }
167
начало_комбинационного_блока
169
ast.addNode(ast.sbl.host, ast.sbl.op.AutoDeclaration, 0);
170
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.Initialize, 0);
171
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.FunctionDefinition, 0);
172
ast.addNode_StepInto(ast.sbl.host, ast.sbl1.op.Function_Body, 0);
178
= список_операторов оператор
183
= оператор_неблокирующего_присваивания ";"
184
= оператор_блокирующего_присваивания ";"
188
******************************************************************************************************/
190
= начало_триггерного_блока блок_чувствительности тело_блока
194
ast.addNode(ast.sbl.host, ast.sbl.op.FunctionDefinitionEnd, 0);
196
ast.addNode(ast.sbl.host, ast.sbl.op.PostInitialize, 0);
197
ast.addNode(ast.sbl.host, ast.sbl.op.Announcements_Completed, 0);
198
ast.addNode(ast.sbl.host, ast.sbl.op.FunctionTethered, 0);
200
// = начало_триггерного_блока "@" "(" список_чувствительности ")" "begin" список_операторов_триггерных "end"
203
начало_триггерного_блока
205
ast.addNode(ast.sbl.host, ast.sbl.op.AutoDeclaration, 0);
206
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.Initialize, 0);
207
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.FunctionDefinition, 0);
212
= начало_блока_чувствительности список_чувствительности ")"
215
ast.addNode_StepInto(ast.sbl.host, ast.sbl1.op.Function_Body, 0);
219
начало_блока_чувствительности
220
= "@" "(" //{ ast.addNode_StepInto(ast.sbl.host, ast.sbl1.op.Function_Params, 0); }
223
список_чувствительности
224
= сигнал_чувствительности
225
= список_чувствительности "," сигнал_чувствительности
228
сигнал_чувствительности
234
******************************************************************************/
236
= базовый_условный_оператор >
237
{ ast.goParent(); ast.goParent(); }
238
= базовый_условный_оператор условие_else_триггерное
239
{ ast.goParent(); ast.goParent(); }
242
базовый_условный_оператор
243
= условие_if "begin" список_операторов "end"
244
= условие_if оператор
248
= "if" "(" выражение ")" {
249
ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.If, 0);
250
ast.addNode_StepInto(ast.sbl.host, ast.sbl1.op.If_True_Body, 0);
253
условие_else_триггерное
254
= слово_else "begin" список_операторов "end"
255
= слово_else оператор
260
ast.addNode_StepInto(ast.sbl.host, ast.sbl1.op.If_Else_Body, 0);
264
/* Оператор присваивания
265
******************************************************************************************************/
266
оператор_блокирующего_присваивания
267
= адрес знак_присваивания выражение
269
= адрес знак_присваивания_с_итерацией выражение
273
= "=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.Assignment, 0); }
275
знак_присваивания_с_итерацией
276
= "+=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.AssignmentAddition, 0); }
277
= "-=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.AssignmentSubtraction, 0); }
278
= "*=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.AssignmentMultiplication, 0); }
279
= "/=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.AssignmentDivision, 0); }
280
= "%=" { ast.addNode_StepInto(ast.sbl.host, ast.sbl.op.AssignmentModulo, 0); }
283
/* Оператор неблокирующего присваивания
284
******************************************************************************************************/
285
оператор_неблокирующего_присваивания
286
= адрес "<=" выражение
287
{ ast.addNode(ast.sv.host, ast.sv.op.Assign, 0); }