• 分析树和语法树


      编译器在实际阅读源程序的时候,首先通过扫描程序执行语法分析(Lexical analysis):它将字符序列收集到称作记号(token)的有意义单元中,记号同自然语言,如英语中的字词。

      例如在下面的代码行中:

      a[index] = 4 + 2

      这个代码包括了12个非空字符,但只有8个记号:

      

      每一个记号均由一个或多个字符组成,在进一步处理之前它已被收集在一个单元中。

      

      语法分析程序从扫描程序中获取记号形式的源代码,并定义程序结构的语法分析(syntax analysis),这与自然语言中句子的语法分析类似。语法分析定义了程序的结构元素极其关系。通常将语法分析的结果表示为分析树(parse tree)或语法树(syntax tree)。

      例如:还是那行C代码,它表示一个称为表达式的结构元素,该表达式是一个由左边为下标表达式、右边为整型表达式的赋值表达式组成。这个结构可按下面的形式表示为一个分析树:

      

      请注意,分析树的内部节点均由其表示的结构名标示出,而分析树的叶子则表示输入中的记号序列(结构名以不同字体表示以示与记号的区别)。

      分析树对于显示程序的语法或程序元素很有帮助,但是对于表示该结构却显得力不从心了。分析程序更趋向于生成语法树,语法树是分析树中所包含信息的浓缩(有时因为语法树表示从分析树中的进一步抽取,所以也被称为抽象的语法树(abstract syntax tree))。下面是C赋值语句的抽象语法树的例子:

      

      ps: 昨天看到这个,本来想立刻记录下来的,因为种种别的事情,耽误了。o(︶︿︶)o 唉,只有今天来做了。

        我本想找一个现成的介绍之类的转载过来,这样能够省不少力气。

        可是,没有合适的。

        以上均是我的手打,半个多小时啊~

  • 相关阅读:
    IPC之util.h源码解读
    新麦装机问题汇
    AngularJS2+调用原有的js脚本(AngularJS脚本跟本地原有脚本之间的关系)
    K60平台智能车开发工作随手记
    苹果手机上下载的文件在哪里?
    Mac电脑C语言开发的入门帖
    Python2中文处理纪要
    比特币核心概念及算法
    将dylib库嵌入macOS应用的方法
    那些令人惊艳的TensorFlow扩展包和社区贡献模型
  • 原文地址:https://www.cnblogs.com/xiaomiao/p/3146390.html
Copyright © 2020-2023  润新知