标记终端或将它们写入解析器语法?
看一看:http://www.verilog.com/VerilogBNF.html标记终端或将它们写入解析器语法?
UNARY_OPERATOR和BINARY_OPERATOR作为标记重叠。 OUTPUT_SYMBOL和LEVEL_SYMBOL也是如此。我确定还有其他人。
我的分词(法)没有任何背景,不知道它是否应该返回UNARY_OPERATOR或BINARY_OPERATOR。
如果它们没有被lex规则标记,我可以将这些标记(UNARY_OPERATOR & BINARY_OPERATOR)写入解析器(yacc)语法。
我遇到的问题是使用OUTPUT_SYMBOL和LEVEL_SYMBOL,我无法为此编写解析器语法,因为有时会由标记器将其作为IDENTIFIERS进行匹配。
我希望我清楚
不要使用语法 - 这是古老的,而且几乎肯定将是错误的。
您需要举一个具体问题的例子。 lex不需要Verilog的任何上下文 - 返回一个标记,并在yacc中对其进行分类。
我刚刚上传了Verilog的语法与LRSTAR 4.0工作正常。语法可以在下载中找到:http://lrtec.com/lrstar。它的写法比上面引用的语法风格更新。
二进制运营商应该在语法(语法分析器)来处理,而不是词法分析器。我不知道 问题是OUTPUT_SYMBOL什么,可是,因为我还没有分析说,与语法解析器 发生器看到冲突报告所说的话。
如果OUTPUT_SYMBOL与IDENTIFIER具有相同的外观,可以通过在符号表中进行查找来区分 它们与s。如果OUTPUT_SYMBOLs没有 被放在符号表和标识符先前声明,然后进行简单的查找 会告诉你是否有一个OUTPUT_SYMBOL或标识符。
如果您在语法OUTPUT_SYMBOL注明:idenfitier,你会得到一个冲突,那么你可以 改变规则:OUTPUT_SYMBOL:output_symbol,可以在终端由 符号表中查找返回(如果没有找到在符号表中)。
不幸的是,我不熟悉使用Verilog,对不起。
我的问题是OUTPUT_SYMBOL和LEVEL_SYMBOL,我不能 写解析器文法这一点,因为有时会 标识符的由分词器相匹配。
是的。一个UDP表项可能包含标识符和数字。你需要这样一个创造了一系列的规则:
udp_seq_table_entry :
udp_table_prefix+ COLON table_element COLON table_element SEMICOLON;
udp_table_prefix :
table_element
| edge_indicator;
edge_indicator :
LPARAN table_element
(
table_element RPARAN // X?, ?X, 1b,... two tokens
| RPARAN // xB, xX, B1,... one token
);
table_element :
DECIMALNUMBER | IDENTIFIER | '-' | '?' | '*';
那么你的工具将有权检查标识符和数量,以确保它们只包含解析后的正确的字符。
我不会试图简单地将Verilog EBNF传递给解析器生成器。有些东西像module_instantiation和udp_instantiation可能无法区分,直到设计完成后。我从来没有使用它,但Verilog-Perl有一个Verilog(1364-2005)分析器。
谢谢!!!!!! – sigflup