請參閱下面的語法。當我嘗試解析:當其他字符需要優先時ANTLR匹配字符?
String s = "UNH+message refere+APERAK:D:97A:UN\n";
我得到以下錯誤:
line 1:34 mismatched character '\n' expecting 'H'
line 2:0 missing RDEL at '<EOF>'
這沒有意義對我來說,因爲它似乎是在尋找UNH遇到之前\ n,這將不遵循'文件'規則。
grammar Aperak;
options {
language = Java;
}
@header { package test.fixed.aperak; }
@lexer::header { package test.fixed.aperak; }
file returns [String result]: 'UNH' unh01 unh02 RDEL { $result = $unh01.text + " -- " + $unh02.text; };
unh01 : FDEL optField;
unh02 : FDEL unh02x1 unh02x2 unh02x3 unh02x4 (unh02x5)?;
unh02x1 : optField;
unh02x2 : SDEL optField;
unh02x3 : SDEL optField;
unh02x4 : SDEL optField;
unh02x5 : SDEL optField;
optField : AN*;
RDEL : '\n';
SDEL : ':';
FDEL : '+';
AN : 'a'..'z' | 'A'..'Z' | '0'..'9' | ' ';
你的修正是正確的,但答案並不完全正確:詞法分析器不會因爲三個標記而感到困惑:這些標記(「U」,「N」,「H」)將會不會被創建。在嘗試從輸入'UNx'(其中'「x」是除「H」之外的任何其他輸入)創建一個'UNH'標記後,詞法分析器無處可回,因爲'AN'匹配單個字符。 – 2012-01-10 08:43:00
@BartKiers我沒有說三個標記*會被創建,只是有一個規則可以用來將字符串UNH解釋爲三個標記的序列。對我來說,「詞法分析器無處可回」是一種明智的方式來說「詞法分析器變得困惑」:) – dasblinkenlight 2012-01-10 12:20:48
你說:*「一個由三個」AN「類型的標記組成的序列,其中帶有」U「 ,''N「',和'」H「'」* ...或許你的意思是我剛纔所說的,但措辭表明了我之前評論的內容。 – 2012-01-10 12:42:42