Нов съм в използването на 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