有没有办法跳过特定块的解析,同时使用输入或退出方法在ANTLR4中使用侦听器。 我已经在这里阅读了链接,但无法使其工作。 谢谢!
当您将侦听器模式与您自己的侦听器类一起使用时,输入已经正确进行了词法解析。 因此,您的问题的答案是否定的。 当你使用侦听器时,你通常只是在解析后走遍树。
这是否意味着一切都失去了? 当然不是。 您所要做的就是不为要"忽略"的构造编写Enter
或Exit
事件。就是这么简单。
至于if-else语句,我一直使用这样的访问者模式实现它们:
至于如何编写if
语句,我将带您了解我实现它们的方式:
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;
}
当然,这在上下文之外可能没有多大意义,但请放心,它有效。 要在其完整的上下文中看到这一点,请访问 巴特·基尔斯 获取语法和实现的一个很好的例子。