簡體   English   中英

Antlr語法與預期的詞法分析器規則不匹配

[英]Antlr grammar not matching expected lexer rule

我正在嘗試使用以下規則匹配持續時間字符串,例如for 30 minutesfor 2 hours

durationPhrase: FOR_STR (MINUTE_DURATION | HOUR_DURATION);

MINUTE_DURATION: NONZERO_NUMBER MINUTE_STR;

HOUR_DURATION: NONZERO_NUMBER HOUR_STR;

MINUTE_STR: 'minute'('s')?;

HOUR_STR: 'hour'('s')?;

FOR_STR: 'for';

NONZERO_NUMBER: [0-9]+;

WS: (' '|[\n\t\r]) -> skip;

輸入以下內容:

for 30 minutes

嘗試調試/匹配durationPhrase規則時,出現以下錯誤:

line 1:4 mismatched input '30' expecting {MINUTE_DURATION, HOUR_DURATION}

但是我似乎無法弄清楚“ 30”匹配的詞法規則是什么? 我印象中“最長的”詞法分析器規則將獲勝,這將是 MINUTE_DURATION規則。

而是首先匹配NONZERO_NUMBER嗎? 如果是這樣,為什么?

它與NONZERO_NUMBER匹配,因為其他任何模式均不適用。 如果您輸入了30minutes ,則它將與MINUTE_DURATION相匹配,但作為令牌模式, MINUTE_DURATION將與空格字符不匹配。

您可以通過-> skip令牌WS來忽略空格。 只有在將WS識別為令牌后才能發生這種情況。 即在標記化之后。 在標記化過程中,空格字符只是字符。

如果您制定MINUTE_DURATIONHOUR_DURATION語法規則而不是詞法規則,則它應能按預期工作。

暫無
暫無

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

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