Antlr的行为规则和属性作用域 Rule Actions Attribute Scopes

Rule Actions

(1)@init {...}

1)在生成代码之前插入包含的代码
可以用于在可选规则行为中定义声明局部变量

2)可以用于tree parser的多项式和term rules的前面

(2)@after {...}

1)在生成代码后,插入包含的代码(contained code)


Attribute Scopes

(1)Global scopes

1)可以在任何规则之外定义指定的范围

2)定义形式:
scope name{
type variable;
. . .
}
在规则中使用变量名的命令:scope name;  如果是使用多个变量名,把它们列举出来并用空格分隔它们。
3)行为规则如何获取scope中的属性?
通过命令:$name::variable

(2)Rule scopes

1)在规则内定义且没有名字

2)定义形式:
scope {
type variable;
...
}

3)调用形式:
$rule-name::variable



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ANTLR(ANother Tool for Language Recognition)是一个用于构建语法分析器的工具。ANTLR3和ANTLR4是ANTLR的两个主要版本,它们之间有几个重要的区别: 1. 语法规则定义:ANTLR3使用基于词法分析器和语法分析器的Combined Grammar形式,将词法规则和语法规则组合在一起。ANTLR4引入了新的语法定义方式,使用单独的词法规则和语法规则文件。 2. 词法规则ANTLR4的词法规则采用了更严格的匹配方式。它引入了词法模式(lexical mode),允许开发者对不同上下文下的词法规则进行不同的处理。 3. 错误处理:ANTLR4提供了更强大的错误处理机制。它支持自定义错误处理器,开发者可以通过重写错误处理方法来实现自定义的错误处理策略。 4. 性能优化:ANTLR4在性能方面进行了优化,相对于ANTLR3,它生成的语法分析器更高效、更快速。ANTLR4引入了SLL模式(Strong LL parser),在解析过程中尽可能地使用单看头(single-token lookahead)来加速解析。 5. 支持的目标语言:ANTLR3支持多种目标语言(如Java、C++、C#等),而ANTLR4更进一步扩展了这个列表,支持更多的编程语言(如Python、JavaScript等)。 总体而言,ANTLR4相对于ANTLR3在语法定义、错误处理、性能和目标语言支持等方面有着显著的改进。因此,如果选择使用ANTLR,通常推荐使用ANTLR4来获得更好的开发体验和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值