【问题标题】:Vhdl parser on C#C# 上的 Vhdl 解析器
【发布时间】:2011-11-02 08:34:00
【问题描述】:

我需要制作一个 vhdl 解析器。我决定使用他们网站http://www.antlr.org/grammar/1202750770887/vhdl.g 上的antlr 解析器生成器和vhdl 语法。 我在检查语法时遇到问题并出现此错误:

以下标记定义永远无法匹配,因为先前 标记匹配相同的输入:LETTER,INTEGER,DIGIT...

如果有人以前用过这个,请告诉我语法是否不正确,或者我做错了什么。

【问题讨论】:

  • 您能否向我们展示您的代码中触发此错误消息的解析器规则?

标签: c# parsing antlr vhdl


【解决方案1】:

来自 vhdl.g

BASIC_IDENTIFIER
   :   LETTER ( '_' | LETTER | DIGIT )*
   ;

...

LETTER  
  :  'a'..'z' | 'A'..'Z'
  ;

LETTER、INTEGER 和 DIGIT 看起来都应该是一个片段,因为它们从不被解析器规则调用。

fragment LETTER 
  :  'a'..'z' | 'A'..'Z'
  ;

编辑:正如 Bart 所说,由于 BASIC_IDENTIFIER 在语法中 LETTER 之前列出并涵盖了 LETTER 所做的所有情况,因此词法分析器永远不会创建任何 LETTER 标记。这就是导致警告的原因。

【讨论】:

  • 从来没有从任何解析器(或词法分析器)规则调用它们的事实不是问题:这是因为 LETTER 永远不会成为它自己的标记,因为其他规则,如 BASIC_IDENTIFIER将匹配 LETTER 也匹配的内容。这确实可以通过将它们设为fragments 来解决。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 2012-10-21
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多