使用C目标的ANTLR3自定义访问者/侦听器模式?

时间:2019-07-18 01:24:36

标签: c listener antlr4 antlr3 visitor

使用ANTLR4,可以生成可以被覆盖的基本访问者和侦听器。显然,我需要使用它们来实现类型检查和执行。

ANTLR4 visitor pattern on simple arithmetic example中,可以看到以下示例访问者类:

public class EvalVisitor extends ExpressionsBaseVisitor<Integer> {
    @Override
    public Integer visitOpExpr(@NotNull ExpressionsParser.OpExprContext ctx) {
        int left = visit(ctx.left);
        int right = visit(ctx.right);
        String op = ctx.op.getText();
        switch (op.charAt(0)) {
            case '*': return left * right;
            case '/': return left / right;
            case '+': return left + right;
            case '-': return left - right;
            default: throw new IllegalArgumentException("Unknown operator " + op);
        }
    }

    @Override
    public Integer visitStart(@NotNull ExpressionsParser.StartContext ctx) {
        return this.visit(ctx.expr());
    }

    @Override
    public Integer visitAtomExpr(@NotNull ExpressionsParser.AtomExprContext ctx) {
        return Integer.valueOf(ctx.getText());
    }

    @Override
    public Integer visitParenExpr(@NotNull ExpressionsParser.ParenExprContext ctx) {
        return this.visit(ctx.expr());
    }
  // ...
    }

换句话说,我想用每个访问者方法的实现来实现我的自定义访问者。 但是据我所知,ANTLR3不会生成这样的代码,而且,我很难遵循C目标。我正在显示一个访客示例,但是如果我可以在C目标中使用侦听器模式,那么它也很重要。

0 个答案:

没有答案