1
我有一些數據需要解析。我使用ANTLR4工具來自動生成Java解析器和詞法分析器,我可以使用,以形成從輸入數據低於 語法給出一個結構化的數據:ANTLR4語法不像預期的那樣運行
grammar SUBDATA;
subdata:
data+;
data:
array;
array:
'[' obj (',' obj)* ']';
intarray:
'[' number (',' number)* ']';
number:
INT;
obj:
'{' pair (',' pair)* '}';
pair:
key '=' value;
key:
WORD;
value:
INT | WORD | intarray;
WORD:
[A-Za-z0-9]+;
INT:
[0-9]+;
WS:
[ \t\n\r]+ -> skip;
測試輸入數據:
[
{OmedaDemographicType=1, OmedaDemographicId=100, OmedaDemographicValue=4},
{OmedaDemographicType=1, OmedaDemographicId=101, OmedaDemographicValue=26},
{
OmedaDemographicType=2, OmedaDemographicId=102, OmedaDemographicValue=[16,34]
}
]
輸出繼電器:
line 5:79 mismatched input '16' expecting INT
line 5:82 mismatched input '34' expecting INT
解析器失敗,雖然我有以上預期位置的整數值。
感謝您的回答。我認爲這是解析器規則中關於匹配的詞法令牌的順序。我認爲更多的是用正則表達式忽略這樣一個事實,即在匹配解析器規則本身之前生成第一個詞法標記 –
除了盧卡斯的答案之外:如果在解析中發現意外行爲,則始終通過查看詞法分析器生成的標記開始解決它們。這會告訴你令牌序列與你預期的不同。 –