Parsing 将终端标记化或将其写入解析器语法?

Parsing 将终端标记化或将其写入解析器语法?,parsing,tokenize,verilog,yacc,lex,Parsing,Tokenize,Verilog,Yacc,Lex,看看这个: 一元_运算符和二元_运算符作为标记重叠。输出_符号和级别_符号也是如此。我肯定还有其他人 我的标记器(lex)没有任何上下文,也不知道它应该返回一元_运算符还是二元_运算符 我可以将这些标记(一元_运算符和二元_运算符)写入解析器(yacc)语法,如果它们没有被lex规则标记的话 我遇到的问题是输出符号和级别符号,我无法为此编写解析器语法,因为有时标记器会将其作为标识符进行匹配 我希望我很清楚不要使用那种语法——它很古老,几乎肯定是错误的 你需要给出一个具体问题的例子。lex不需要V

看看这个:

一元_运算符和二元_运算符作为标记重叠。输出_符号和级别_符号也是如此。我肯定还有其他人

我的标记器(lex)没有任何上下文,也不知道它应该返回一元_运算符还是二元_运算符

我可以将这些标记(一元_运算符和二元_运算符)写入解析器(yacc)语法,如果它们没有被lex规则标记的话

我遇到的问题是输出符号和级别符号,我无法为此编写解析器语法,因为有时标记器会将其作为标识符进行匹配


我希望我很清楚

不要使用那种语法——它很古老,几乎肯定是错误的


你需要给出一个具体问题的例子。lex不需要Verilog的任何上下文-返回一个令牌,并在yacc中进行排序。

不要使用该语法-它很古老,几乎肯定是错误的


你需要给出一个具体问题的例子。lex不需要Verilog的任何上下文-返回一个令牌,并在yacc中进行排序。

我刚刚上传了一个Verilog语法,可以很好地使用。可以在以下下载中找到语法:。它的语法风格比你上面提到的要新

二进制运算符应该在解析器语法中指定,而不是在lexer语法中指定。我不确定OUTPUT_符号的问题是什么,因为我没有使用解析器生成器分析该语法,以查看冲突报告中的内容

如果输出_符号与标识符具有相同的外观,则有一种方法可以进行区分 通过在符号表中进行查找,可以从符号中删除它们。如果输出_符号不必放在符号表中,并且之前声明了标识符,那么简单的查找将告诉您是否有输出_符号或标识符

如果在语法输出\u SYMBOL:idenfipier中指定了一个冲突,则可以将规则更改为:OUTPUT\u SYMBOL:OUTPUT\u SYMBOL,它可以是符号表查找返回的终端(如果在符号表中找不到)


很遗憾,我不熟悉Verilog,抱歉

我刚刚上传了一个Verilog语法,可以很好地使用。可以在以下下载中找到语法:。它的语法风格比你上面提到的要新

二进制运算符应该在解析器语法中指定,而不是在lexer语法中指定。我不确定OUTPUT_符号的问题是什么,因为我没有使用解析器生成器分析该语法,以查看冲突报告中的内容

如果输出_符号与标识符具有相同的外观,则有一种方法可以进行区分 通过在符号表中进行查找,可以从符号中删除它们。如果输出_符号不必放在符号表中,并且之前声明了标识符,那么简单的查找将告诉您是否有输出_符号或标识符

如果在语法输出\u SYMBOL:idenfipier中指定了一个冲突,则可以将规则更改为:OUTPUT\u SYMBOL:OUTPUT\u SYMBOL,它可以是符号表查找返回的终端(如果在符号表中找不到)

很遗憾,我不熟悉Verilog,抱歉

我的问题是输出符号和级别符号,我不能 为此编写解析器语法,因为有时 由标记器生成的标识符

对。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 | '-' | '?' | '*';
然后,您的工具必须检查标识符和数字,以确保它们在解析后只包含正确的字符

我不会简单地将verilogebnf传递给解析器生成器。在设计精化之前,诸如模块_实例化和udp_实例化之类的东西可能无法区分。我从未使用过它,但Verilog Perl有一个Verilog(1364-2005)解析器

我的问题是输出符号和级别符号,我不能 为此编写解析器语法,因为有时 由标记器生成的标识符

对。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 | '-' | '?' | '*';
然后,您的工具必须检查标识符和数字,以确保它们在解析后只包含正确的字符

我不会简单地将verilogebnf传递给解析器生成器。在设计精化之前,诸如模块_实例化和udp_实例化之类的东西可能无法区分。我从未使用过它,但Verilog Perl有一个Verilog(1364-2005)解析器