Skip subtree in Listener ANTLR4 -
is there way skip parsing of specific block while using listener in antlr4 using enter or exit method. have read link here unable make work. thank you!
by time you're using listener pattern own listener class, input correctly lexed , parsed. therefore, answer question no. when you're using listener you're typically walking tree post-parse.
does mean lost though? of course not. have not code enter
or exit
events constructs want "ignore." it's easy.
as if-else statements, i've implemented them using visitor pattern this:
as how program if
statement, i'll give peek @ way implement them:
public override muvalue visitifstmt(lisbasicparser.ifstmtcontext context) { lisbasicparser.condition_blockcontext[] conditions = context.condition_block(); bool evaluatedblock = false; foreach (lisbasicparser.condition_blockcontext condition in conditions) { muvalue evaluated = visit(condition.expr()); if (evaluated.asboolean()) { evaluatedblock = true; visit(condition.stmt_block()); break; } } if (!evaluatedblock && context.stmt_block() != null) { visit(context.stmt_block()); } return muvalue.void; }
granted, doesn't make sense out of context, rest assured works. see in full context, please visit bart kiers excellent example of grammar , implementation .
Comments
Post a Comment