2
lex.addMarkup("/*", "*/", "", lex.LexemeType.Comment);
3
lex.addMarkup("\"", "\"", "", lex.LexemeType.Annotation);
5
lex.addMask("@BUILDING_NUMBER_MASK", lex.LexemeType.Number, 10);
7
//модуль = "module" имя_модуля "#" "(" cписок_параметров ")" "(" список_портов ")" ";" "endmodule";
8
//cписок_параметров = "parameter" тип_параметра "name" ";";
9
//список_портов = "input" тип_данных "name" "," "output" тип_данных "name" "," "inout" тип_данных "name";
10
//тип_параметра = "type_of_parameter";
11
//тип_данных = "type_of_data";
12
////тест ожидает выполнения подряд input, output ... не разрешает использовать что-то одно
14
////если написать "имя = ID", то в тесте ID будет считаться ошибкой
16
программа = список_операторов;
19
= список_операторов оператор | оператор;
21
оператор = оператор_include | оператор_import | модуль | объявление_переменной | объявление_параметра;
24
= "`" "include" ANNOTATION;
27
= "import" адрес_модуля ";";
32
модуль = "module" ID ";" список_операторов "endmodule"
33
= "module" ID "(" список_портов ")" ";" список_операторов "endmodule"
34
= "module" ID "#" "(" список_параметров ")" ";" список_операторов "endmodule"
35
= "module" ID "#" "(" список_параметров ")" "(" список_портов ")" ";" список_операторов "endmodule"
36
= "module" ID ";" "endmodule"
37
= "module" ID "(" список_портов ")" ";" "endmodule"
38
= "module" ID "#" "(" список_параметров ")" ";" "endmodule"
39
= "module" ID "#" "(" список_параметров ")" "(" список_портов ")" ";" "endmodule";
42
= список_портов "," тип_порта тип_данных ID | тип_порта тип_данных ID;
44
тип_порта = "input" | "output" | "inout";
46
тип_данных = "logic" | "integer";
49
= список_параметров "parameter" тип_параметра ID ";" | "parameter" тип_параметра ID ";";
52
= "logic" | "integer";
55
= тип_переменной ID ";";
61
= "parameter" ID "=" значение_параметра ";";