ANTLR如何区分相同类型的输入参数
如果我有输入消息: 名字是(乔恩,特德)不是(彼得) 我想要这个:ANTLR如何区分相同类型的输入参数,antlr,antlr3,abstract-syntax-tree,Antlr,Antlr3,Abstract Syntax Tree,如果我有输入消息: 名字是(乔恩,特德)不是(彼得) 我想要这个: name | |-----| IS IS NOT | | | Peter |----| Jon Ted 但我收到了: name | |-----------------| IS IS NOT |
name
|
|-----|
IS IS NOT
| |
| Peter
|----|
Jon Ted
但我收到了:
name
|
|-----------------|
IS IS NOT
| |
| |
|----|-----| |----|-----|
Jon Ted Peter Jon Ted Peter
我的语法文件有:
我如何区分哪些“属于”属于“是”,哪些属于“不是” 像这样的东西应该可以做到:
expression
: NAME IS left=id_list IS NOT right=id_list -> ^(NAME ^(IS $left) ^(NOT $right))
;
id_list
: '(' ID (',' ID)* ')' -> ID+
;
IS : 'IS';
NOT : 'NOT'; // not a single token that is 'IS NOT'
ID
: ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)+
// Not `(...)*`: it should always match a single char!
;
你能告诉我我是否可以用这种符号(保存在变量中)来保存“表达式”吗?例如:赋值:“(“表达式(条件表达式)*”)”(条件表达式)*->^(括号^(条件表达式*));我想将括号之间的内容和括号后面的内容分开,以打印如下内容:->^(括号$between)$after@user2144555,尝试一下,看看你的结局如何。如果您遇到问题,请随意提出一个新问题,其细节比这些评论框所能容纳的要详细一些。
NAME
: 'name'
;
Identifier
: ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)*
;
expression
: NAME IS left=id_list IS NOT right=id_list -> ^(NAME ^(IS $left) ^(NOT $right))
;
id_list
: '(' ID (',' ID)* ')' -> ID+
;
IS : 'IS';
NOT : 'NOT'; // not a single token that is 'IS NOT'
ID
: ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)+
// Not `(...)*`: it should always match a single char!
;