语义谓词在解析中的应用与歧义处理
1. 支持多方言语法构建
在语法构建中,我们可以使用运行时布尔开关来支持多种方言。例如,对于 Java 中 enum 关键字在不同版本的处理。
1.1 谓词位置调整
可以将谓词 {java5}? 从 enumDecl 规则中拖出,放在调用该规则之前,如下所示:
prog:
(
{java5}? enumDecl
|
stat
)+
;
这种调整在功能上是等效的,只是风格上的差异。关键在于,解析器必须在到达 enumDecl 规则中的 'enum' 标记引用之前,在 (...)+ 子规则的第一个备选分支中遇到谓词。
1.2 词法分析器中的谓词应用
在词法分析器中使用谓词可以激活或停用标记,而不是语言中的短语。以 enum 关键字为例,在 Java 5 之前的模式中,将 enum 作为普通标识符匹配;在 Java 5 模式中,将其作为单独的关键字标记。
以下是相关的词法规则:
ENUM:
'enum' {java5}? ; // must be before ID
ID
:
[a-zA-Z]+ ;
当
超级会员免费看
订阅专栏 解锁全文
83

被折叠的 条评论
为什么被折叠?



