ANTLR不会始终因为间接寻址而导致尺寸/性能损失。在ANTLR中,可以使用带有语法动作的子规则的简单子规则来实现间接寻址,而无需带来额外的尺寸/性能开销。以下是一个示例:
grammar Example;
/* 定义语法规则 */ parse : statement+; statement : ID '=' expr ';';
/* 定义简单子规则 / expr : INT # IntExpr | ID # IdExpr | expr '+' expr # AddExpr | expr '' expr # MulExpr | '(' expr ')' # ParenExpr ;
/* 定义带有语法动作的子规则 / subExpr : ID {System.out.println("Got ID: " + $ID.text);} | INT {System.out.println("Got int: " + $INT.text);} | subExpr '+' subExpr | subExpr '' subExpr | '(' subExpr ')' {System.out.println("Got parenthesized subexpression");} ;
在上面的示例中,expr是包含间接寻址的简单子规则。subExpr是带有语法动作的子规则,它可以基于语法规则的复杂性实现优化。
因此,可以使用带有语法动作的子规则的简单子规则来实现间接寻址,这不会带来额外的尺寸/性能开销。