zoukankan      html  css  js  c++  java
  • 编译原理:ch1编译概述;ch2程序语言的基本知识;ch3词法分析

    ch1编译概述

    1.什么是编译程序

    2.翻译程序的类别

    汇编程序:用于特定九三级上的汇编语言的翻译程序 

    编译程序(一次翻译多次执行):将高级语言翻译成低级语言的翻译程序,

    高级语言(源程序)->机器语言程序->执行机器语言程序

    解释程序(翻译一次执行一次):将会话式语言翻译成目标指令的翻译程序,

    高级语言(源程序)->机器语言程序->再翻译源程序的下一条语句并执行。

    3.编译程序的步骤

    源程序->词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成->目标代码

    具体每个步骤的解释

    词法分析(Lexical Analysis):读取字符序列(源程序),把这些字符序列切分为有意义的单词,而且对每个单词,给出其类型,生成单词符号(token),表示为<单词词类,单词值>,识别关键词(keyword)、标识符(identifier)、数字(number)等,空格作为分隔符,忽略掉,而且过滤注释部分代码。

    语法分析(Syntax Analysis/Parsing):把词法分析器输出的单词符号为基本单位,根据语言的语法规则,构造分析树或语法树,语法树体现了单词符号序列的语法结构,分析树的节点是单词符号或语法单元,语法树的节点是单词符号或语法单元,语法树的节点通常是操作符,而其子节点则是操作数,单词符号序列->分析树(语法树)。

    语义分析(Semantic Analysis):利用语法树和符号表,收集语义信息,类型检查和类型转换,验证语法结构合法的程序是否存在语义错误,语法树->带语义信息的语法树。

    中间代码生成(Intermediate code generation):生成戴梦得中间表示,中间代码可以认为是一种面向抽象机器的代码结构,需满足两个属性(易于产生,易于翻译成目标语言);带语义(注释)的树->中间代码。

     

    中间代码优化(Intermediate code optimization),对中间代码进行优化(提高时间和空间效率)

     

    代码生成(Code generation):生成目标代码,输入:源程序的中间表示,输出:目标语言,与机器相关。

    4.符号表管理:管理分析过程中得到的源程序中的标识符的各种信息,记录源程序中使用的标识符,收集每个标识符的各种属性信息,包括类型、作用域、存储分配信息。

    5.出错处理:检查错误的位置、性质(词法、语法、语义。。。),错误恢复。

    6.编译器的组织--------前端与后端(提高开发编译器的效率和可移植性)

    前端:包括词法分析、语法分析、语义分析、中间代码产生,以及部分代码优化工作,相关的错误处理和符号表的建立;前端依赖于源程序并在很大程度上独立于目标机器。

    后端:包括代码优化、代码生成和相关错误处理;并依赖于目标机器。

    7.编译程序的生成

    正则表达式(词法分析)、上下文无关文法(语法分析)、属性文法(语义分析)。

     ch2程序语言的基本知识

    1.符号串和语言

    符号串:字母表上的符号的有穷序列,也称为句子;例如:0110,great;符号串的运算:连接(Concatenation)、幂;特殊的子串(前缀和后缀和真子串w=uv);

    2.文法和语言

    生成方式(文法):语言中的每个句子可以用严格定义的规则来构造。识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答”是“,若不属于,要么能停止并回答”不是“,要么永远继续下去。主要用的是上下文无关文法和正规文法(正则文法)。以有限的规则描述无限的语言现象(语言的有穷描述)。

    特殊形式的推导:最左推导和最右推导(规范推导);归约:用产生式的左部来代替右部的过程(最左归约和最右归约)

    3.分析树和二义性

    如果一个文法的句子有两棵或两棵以上的分析树,称此句子是二义的。最左(右)推导与分析树一一对应,句子二义说明它有两个或以上最左(右)推导。

    ch3词法分析

    1.词法分析程序的设计

    主要功能:

    读入源程序字符序列;

    对源程序进行预处理,如删除注释和回车换行符,宏展开等;

    识别源程序中的单词,创建符号表并在相应的符号表中登录信息;

    将单词与行号关联起来,以便编译器能将错误信息与源程序位置联系起来;

    输出单词序列。

    2.单词的描述

    单词是具有独立含义的最小语法单位,程序设计语言(标识符、关键字、常数、运算符、分界符、字符串)二元式<类别,单词的属性值>来表示单词符号

    3.有限自动机,正规式与有限自动机的等价性

     DFA(确定性有限自动机):最小化(求异法)

    NFA(非确定性有限自动机)

    4总结

    ch4语法分析

    1.语法分析概述

     2.自顶向下分析

    不确定的自顶向下分析(递归下降分析法);LL(1)

    自顶向下方法:分析树是从根到叶子节点的顺序构建的,实际上,是寻找从开始符号出发到句子的推导序列,分析器的输入由左到右一个符号一个符号的扫描。

    预测分析方法总结:左递归消除,提取左因子,FIRST,FOLLOW,SELECT,LL(1),预测分析表的构建,预测分析器(表驱动的分析方法)

    3.自底向上分析

    算符优先方法;SLR(1),LALR(1),LR(1)

    自底向上分析:分析树是从叶子节点到根节点的顺程序构建的;实际上,是寻找从句子出发到开始符号的规约序列,分析器的输入从左到右一个符号一个符号的扫描。

    一生有所追!
  • 相关阅读:
    C语言ASM汇编内嵌语法
    Linux下安装安装arm-linux-gcc
    苹果手机(ios系统)蓝牙BLE的一些特点
    蓝牙BLE数据包格式汇总
    蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解
    nrf52840蓝牙BLE5.0空中数据解析
    nrf52840蓝牙BLE5.0空中速率测试(nordic对nordic)
    nrf52832协议栈S132特性记录
    使用 Open Live Writer 创建我的第一个博文
    Codeforces Round #691 (Div. 2) D
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8593508.html
Copyright © 2011-2022 走看看