其他分享
首页 > 其他分享> > 关于歧义

关于歧义

作者:互联网

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

关键字和标识符冲突是最常见的歧义问题,比如以下语法
  rule :
    BEGIN : 'begin'
    ID : [a-z]+

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

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

标签:语法,begin,语法分析,词法,关于,匹配,歧义
来源: https://www.cnblogs.com/shiliye/p/12605771.html