簡體   English   中英

如果ANTLR與任何已定義的令牌都不匹配,是否有默認令牌可用?

[英]Is there a default token available in ANTLR in case it doesn't match any of the already defined Tokens?

我有一個要求,其中我已將Lexer令牌寫為:

 IF_LEXER_TOKEN: ('I')('F') (.)* ('E')('N')('D')_('I')('F')
 ANY :(options {greedy=true;}: .)* ;

但是,如果輸入為:

IF a>b then a=b END_IF
IF c>d then c=d

在這種情況下,預期的行為是它應在第一行中使用令牌IF_LEXER_TOKEN,在第二行中使用ANY令牌,而應在兩行中都使用ANY令牌。 請幫助。 注意:由於某些限制,我無法為上述情況創建解析器規則。

不,沒有這樣的默認令牌。 但是您可以輕松創建它:

ANY: .*?;

最好是使此非貪婪性允許在輸入之后匹配其他令牌。 順便說一句:在詞法分析器中定義完整序列有幾個缺點,例如,如果詞法分析器規則失敗,錯誤報告將無法為您提供充分的理由。 您必須顯式處理所有空格。 而且您放棄了這樣的原則,通常令牌之間沒有多少空格(包括換行符)無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM