我有以下形式的腳本語言: <keyword> = <text>,
ANTLR v3的解析領域特定語言
哪裏<text>
可以包含關鍵字有時<text>
可以包含指令取決於什麼<keyword>
使用。
我想根據<keyword>
的使用情況來處理<text>
。
/* lang.g */
grammar lang;
/* parser rules */
script : assignment+ ;
assignment : keyword VALUE ;
/* cannot do the following (but I would like to)
assignment : command | command_b | display ;
command : COMMAND '=' /* parser rules for command */ ',' ;
command_b : COMMAND_B '=' /* parser rules for command_b */ ',' ;
display : DISPLAY '=' ~(',')+ ',' ;
*/
/* lexer rules */
VALUE : '='! ~(',')+ ','!
COMMAND : 'command' ;
COMMAND_B : 'command_b' ;
DISPLAY : 'display' ;
WS : (' '|'\t'|'\r'|'\n')+ {$channel=HIDDEN;} ;
例輸入文件:
command = goto->step_b,
display = this is some plain text. command keyword used,
command_b = read_file:"readme.txt",
我希望能夠以不同的方式處理command
,command_b
和display
規則使用ANTLR不使用目標語言協助解析一切。使用上面的* .g文件;第一行有command
和goto->step_b
作爲標記。需要進一步解析goto->step_b
,那麼讓ANTLR完成所有這些工作而不是目標語言會很好。
如果沒有辦法直接做到這一點,我想我會在兩個階段完成這一點。上述
- 使用* .G文件來分析輸入文件
- 卡爾的一切,但
command
和command_b
節點;僅使用爲command
和command_b
語法定義的語法將這些節點饋送到另一解析器。
有沒有辦法使用單一的語法,這樣我可以處理command
/command_b
規則不同於任何其他規則解析腳本?或者我將不得不在多個階段處理腳本文件?
感謝您的任何幫助。
喬希