关于歧义

一般来说语言的语法都是无歧义的,歧义通常会被认为是升序设计上的bug
针对歧义问题,需重新组织语法,使得对于每个输入的词组,语法分析器都能够选择唯一匹配的备选分支
歧义问题在词法分析器和语法分析器中都会发生
antlr的解决办法是匹配在语法定义中最靠前的那条词法规则,即当一个词组符合多个备选分支时,选择所有匹配的备选分支中的第一条

关键字和标识符冲突是最常见的歧义问题,比如以下语法
  rule :
    BEGIN : 'begin'
    ID : [a-z]+
关键字begin,它可以匹配以下两个规则,由于BEGIN:'begin'在上面,因此最终被匹配
词法分析器会匹配可能的最长字符串来生成一个词法符号,如beginer只能匹配[a-z]+,而不是'begin'+er,因此它匹配的是ID:[a-z]+
有时候语言本身就有歧义,因此无论如何修改语法也不会避免

语法分析器本身仅仅验证输入语句的合法性并建立一棵语法分析树

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值