zoukankan      html  css  js  c++  java
  • 关于歧义

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

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

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

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

  • 相关阅读:
    002.NFS相关配置项
    001.NFS简介
    002.DNS-BIND简介
    001.DNS原理及配置格式
    002.DHCP配置
    001.DHCP简介
    001.Chrony时间服务器
    博客开篇记载!
    【python-opencv】图像梯度
    【python-opencv】形态转换
  • 原文地址:https://www.cnblogs.com/shiliye/p/12605771.html
Copyright © 2011-2022 走看看