Я новичок в использовании ANTLR. У меня есть ANTLR грамматика, которая создает АСТ. Я хочу проверить, что если ComparisonExpr содержит FuzzyExpr, я хочу удалить этот узел ComparisonExpr и соединение ("и", "или") перед этим ComparisonExpr (если есть) из AST. Пожалуйста, предложите мне, как это сделать. Я не знаю, что я могу сделать по нормальному правилу перезаписи ANTLR или нет?удалить узел в базе AST по условию
Например
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;
Спасибо. Pannipa
Какую версию ANTLR вы используете? Это будет иметь значение для ответа. – monty0
@ monty0, появление 'output = AST' в опциях предполагает, что OP использует v3. –
@Bart Kiers, я считаю, что это может быть ANTLR 2 с этими опциями. – monty0