本文介绍了ANTLR 如何区分相同类型的输入参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
限时送ChatGPT账号..如果我有我的输入消息:
If I have my input message:
姓名 是(乔恩、泰德)不是(彼得);
name IS (Jon, Ted) IS NOT (Peter);
我想要这个 AST:
name
|
|-----|
IS IS NOT
| |
| Peter
|----|
Jon Ted
但我收到:
name
|
|-----------------|
IS IS NOT
| |
| |
|----|-----| |----|-----|
Jon Ted Peter Jon Ted Peter
我的语法文件有:
...
expression
| NAME 'IS' OParen Identifier (Comma Identifier)* CParen 'IS NOT' OParen
Identifier (Comma Identifier)* CParen
-> ^(NAME ^('IS' ^(Identifier)*) ^('IS NOT' ^(Identifier)*))
;
...
NAME
: 'name'
;
Identifier
: ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)*
;
我如何区分什么属于"是",什么属于不是"?
How can I differentiate what "belongs" to the 'IS' and what to belongs to the 'IS NOT' ?
推荐答案
应该这样做:
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!
;
这篇关于ANTLR 如何区分相同类型的输入参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论