我是使用 ANTLR 的新手。我有创建 AST 的 ANTLR 语法。我想检查ComparisonExpr是否包含FuzzyExpr,然后我想从AST中删除此ComparisonExpr(如果有)前面的ComparisonExpr节点和连词(“and”,“or”)。请建议我怎么做。我不知道我是否可以通过ANTLR的正常重写规则来做到这一点?
例如
Given the input: where $GPA = #high and age = 25
I want the output like this: where age = 25
(delete the conjunction "and" and ComparisonExpr=>"$GPA = #high") because it has the FuzzyExpr=>"#hight")
这是我语法的一部分。
grammar Test;
options{
output=AST;
ASTLabelType=CommonTree;
}
WhereClause :="where" ExprSingle;
ExprSingle :OrExpr;
OrExpr :AndExpr ("or" AndExpr)*;
AndExpr :ComparisonExpr ("and" ComparisonExpr)*;
ComparisonExpr :ValueExpr((ValueComp)ValueExpr)?;
ValueExpr :ValidateExpr
|PathExpr
|ExtensionExpr
|FuzzyExpr;
FuzzyExpr :"#" Literal;
谢谢你。潘尼帕