使用ANTLR 3,我的詞法有規則詞法規則可選後綴不匹配,當它應該使用這種這些匹配正確</p> <pre><code>SELECT VAR1 ASSIGN TO SELECT VAR1 ASSIGN USING </code></pre> <p>匹配
SELECT_ASSIGN:
'SELECT' WS+ IDENTIFIER WS+ 'ASSIGN' WS+ (('TO'|'USING') WS+)?
,這也符合
SELECT VAR1 ASSIGN FOO
但是這不符合
SELECT VAR1 ASSIGN TWO
鑑於我在標準中將TO | USING標記爲可選項。
從生成的Java代碼,我看到了 當詞法分析器注意到的兩個T,它會匹配(「至」) 但由於沒有找到ØT後 然後生成失敗....返回所有從規則的方式 - 因此不匹配。
如何讓我的詞法規則來匹配,當輸入了單詞以字符開始與規則
基本上,我想我的規則是爲了匹配這個(什麼它已經匹配旁邊的後綴可選部分 - 如lised在開始):
SELECT VAR1 ASSIGN TWO
請建議我如何接近/解決這種情況。
注:
這些規則建議在解析器 - 但我有這個在詞法分析器 - 因爲我不想來解析解析器整個輸入,並且要分析的興趣只是內容。因此,在詞法分析器中使用這些規則,我找到了我真正想要解析器解析的部分。
更新1 我可以做2條規則繞過這個問題,像這樣:
SELECT_ASSIGN_USING_TO
: tok='SELECT' WS+ name=IDENTIFIER WS+ 'ASSIGN' WS+ ('USING'|'TO')
SELECT_ASSIGN
: tok='SELECT' WS+ name=IDENTIFIER WS+ 'ASSIGN'
但它是可以做到所期望的一個詞法規則?
請提供一個簡單但完整的詞法分析器語法來完成此操作(a [mcve]) - 問題可能出現在另一個詞法分析器規則中。 –