2011-08-23 72 views
2

我需要製作一個vhdl解析器。我決定從他們的網站http://www.antlr.org/grammar/1202750770887/vhdl.g使用antlr分析器生成器和vhdl語法。 我檢查語法和有此錯誤時遇到了問題:C#上的Vhdl解析器#

The following token definitions can never be matched because prior tokens match the same input: LETTER,INTEGER,DIGIT...

如果任何人有這個工作之前,請告訴我,如果語法不正確,或者如果我做別的事情不正確。

+0

你能告訴我們在你的代碼中觸發這個錯誤信息的解析器規則嗎? – Philippe

回答

2

從vhdl.g

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

... 

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

LETTER,INTEGER及數位看起來都像他們應該是一個片段,因爲他們永遠不會被語法規則調用。

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

編輯:由於巴特曾表示,由於BASIC_IDENTIFIER在語法LETTER上市前,覆蓋所有的情況下,信中,詞法分析器將永遠不會創建任何字母標記。這是導致警告的原因。

+0

謝謝。它在規則之前與片段一起工作。 – Alexander

+1

事實上,從來沒有從任何分析器(或詞法分析器)規則中調用它們並不是問題:這是因爲'LETTER'永遠不會成爲它自己的標記,因爲其他規則,比如'BASIC_IDENTIFIER'將匹配什麼'LETTER'也匹配。這確實可以通過使它們成爲「片段」來解決。 –

+1

@Alexander如果它適合你,請接受這個答案。 – Philippe