0
我必須聲明:爲什麼解析器拆分命令名稱到不同的節點
= MYFUNCTION_NAME(1,2,3)
我的語法是:
grammar Expression;
options
{
language=CSharp3;
output=AST;
backtrack=true;
}
tokens
{
FUNC;
PARAMS;
}
@parser::namespace { Expression }
@lexer::namespace { Expression }
public
parse : ('=' func)*;
func : funcId '(' formalPar* ')' -> ^(FUNC funcId formalPar);
formalPar : (par ',')* par -> ^(PARAMS par+);
par : INT;
funcId : complexId+ ('_'? complexId+)*;
complexId
: ID+
| ID+DIGIT+ ;
ID : ('a'..'z'|'A'..'Z'|'а'..'я'|'А'..'Я')+;
DIGIT : ('0'..'9')+;
INT : '-'? ('0'..'9')+;
在樹上,我得到:
[**FUNC**]
|
[MYFUNCTION] [_] [NAME] [**PARAMS**]
爲什麼解析器分裂功能的名字進入3個節點:?「MyFunction的, 「_」, 「NAME」 我怎樣才能修復它
我發現我可以使用單詞「片段」像片段DIGIT,片段ID – Medic