gpt4 book ai didi

antlr - 如何在条件规则重写中使用 ANTLR 词法分析器标记值

转载 作者:行者123 更新时间:2023-12-01 08:59:55 26 4
gpt4 key购买 nike

我是 ANTLR 的新手,想做以下事情:

鉴于下面的语法片段,我有一个选择规则 *comparison_op* 可以匹配许多标记之一。我想做的是编写条件重写规则 - 例如,如果 token 是 DOESNOTENDWITH 做某事,如果它是 DOESNOTCONTAIN 做某事等。

我似乎无法正确理解这一点。甚至可以这样做吗?当然,我可以为每个条件编写特定的规则,但这似乎也不是最好的方法。

有什么建议吗?


{... snipped ...}

DOESNOTBEGINWITH : 'does not begin with';
DOESNOTENDWITH : 'does not end with';
DOESNOTCONTAIN : 'does not contain';

comparison_op : DOESNOTBEGINWITH | DOESNOTENDWITH | DOESNOTCONTAIN
condition_comparison : (column_name comparison_op v1=valueExpression)
-> {$comparison_op.text == $DOESNOTBEGINWITH.text}?
^(LIKE column_name $v1)
-> ^(comparison_op column_name $v1);

最佳答案

试试这个:

condition_comparison
: (column_name comparison_op v1=valueExpression)
-> {$comparison_op.start.getType() == DOESNOTBEGINWITH}?
^(LIKE column_name $v1)
-> ^(comparison_op column_name $v1)
;

但是,我认为这样写没有任何问题:

condition_comparison
: column_name ( DOESNOTBEGINWITH valueExpression -> ^(LIKE column_name valueExpression)
| DOESNOTENDWITH valueExpression -> ^(DOESNOTENDWITH column_name valueExpression)
| DOESNOTCONTAIN valueExpression -> ^(DOESNOTCONTAIN column_name valueExpression)
)
;

关于antlr - 如何在条件规则重写中使用 ANTLR 词法分析器标记值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14449439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com