我知道詞法規則是匹配單詞而不是句子。但有可能做到這一點。因爲我的輸入有類似下面的格式Lexer規則的句子
ADD FILE first-doc VERSION 1 TYPE sequential FIXED 23 BLOCK 23 MODE
ebdic LABEL standard KEY REC_NR#09545 RULE DOMANI _ scorebestand MKC
和花葯輸入可以有一個像
ADD FILE secound-doc VERSION 3 TYPE normal FIXED 39 BLOCK 39 MODE
gdieds LABEL constant KEY CTR-NR#62872
RULE CBTPSN49 : dagextract (loadfile) met key PIB_KLN_NR
在兩個輸入我上面的解析器規則如下
add_file :
'ADD FILE' file=String 'VERSION' ver=Integer 'TYPE' String
'FIXED' Integer 'BLOCK' Integer 'MODE' codePage=String
'LABEL' String KEY key=String ;
我能寫直到KEY,因爲所有內容都是單個單詞,但不能進一步與RULE進行,因爲它隨着句子的不同而變化
即使我試圖與貪婪匹配
All : .*;
但它拋出的錯誤我。
詞法分析規則上面statment
WhiteSpace: ('\r' | '\t' | '\u000C' | '\n' | ' ') { $channel=HIDDEN; };
COMMENT:('**'.*'\n'|'REMARKS'.*'\n')*{skip();};
String: ('a'..'z'|'A'..'Z'|'-'|'#') ('a'..'z'|'A'..'Z'|'0'..'9'|'-'|'#')*;
Integer: '-'? ('0' | '1'..'9' ('0'..'9')*);
我的問題是「是否有可能與一個詞法規則匹配多個單詞? 如果是這樣那怎麼辦?」
我只能在ANTLR 4中實現這個功能嗎?我只有兩個星期到這個ANTLR 請幫忙。
在此先感謝
嗨@Marc Q. 'everything_until_CR:〜(」 \ n')+;'在我的情況下不起作用 – Mahes 2015-02-10 05:02:54
嗨,Mahes!我對ANTLR3的假設是對的嗎?你不使用ANTLR4的原因是什麼? – 2015-02-10 07:00:14
是的,我只使用ANTLR 3。我沒有安裝Antlr 4 Eclipse插件的Eclipse 4。儘管我嘗試使用build.xml生成詞法分析器和分析器。但語法不同於ANTLR 3到ANTLR 4,ANTLR 4沒有采用重寫規則。由於我的時間非常短,我繼續使用ANTLR 3 – Mahes 2015-02-10 07:06:09