7
我有ANTLR 4以下語法:ANTLR 4詞法分析器記號
grammar Pattern;
//parser rules
parse : string LBRACK CHAR DASH CHAR RBRACK ;
string : (CHAR | DASH)+ ;
//lexer rules
DASH : '-' ;
LBRACK : '[' ;
RBRACK : ']' ;
CHAR : [A-Za-z0-9] ;
而且我試圖解析以下字符串
ab-cd[0-9]
代碼解析出的ab-cd
左側將在我的應用程序中被視爲文字字符串。然後它將[0-9]
解析爲一個字符集,在這種情況下將轉換爲任何數字。我的語法適用於我,除非我不喜歡將(CHAR | DASH)+
作爲解析器規則,因爲它僅僅被視爲令牌。我寧願詞法分析器創建STRING
令牌,給我下面的標記:
"ab-cd" "[" "0" "-" "9" "]"
,而不是這些
"ab" "-" "cd" "[" "0" "-" "9" "]"
我已經看過其他的例子,但一直沒能弄明白。通常,其他示例的引號圍繞這些字符串文字,或者有空格來幫助分隔輸入。我想避免這兩種情況。這可以用詞法規則來實現還是需要像解析器規則那樣繼續處理它呢?
感謝您的洞察。設置這樣的subtokenizers聽起來像是一個完美的解決方案。儘管聲明'只有在詞法分析器語法中才允許詞法模式「,我卻遇到了一個錯誤。我可以將我的語法聲明爲'詞法分析器語法IdPattern;',但是我不能使用分析器規則。我錯過了什麼? – Charles 2013-05-10 19:48:48
您需要爲您的詞法分析器使用「詞法分析器語法」,併爲分析器使用單獨的「分析器語法」(在單獨的文件中)。 – 2013-05-10 19:51:18
這是一個可以幫助他人的鏈接:http://meri-stuff.blogspot.co.za/2011/09/antlr-tutorial-expression-language.html#LexerBasics – Eagle 2016-08-19 03:59:16