Я новичок в использовании ANTLR. У меня есть грамматика ANTLR, которая создает AST. Я хочу проверить, что если ComparisonExpr содержит FuzzyExpr, то я хочу удалить этот узел ComparisonExpr и союз («и», «или») перед этим ComparisonExpr (если он есть) из AST. Пожалуйста, предложите мне, как это сделать. Я не знаю, что я могу сделать по обычному правилу перезаписи 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;
Спасибо. Паннипа
output=AST
в параметрах предполагает, что OP использует v3. - person Bart Kiers   schedule 15.05.2013