首页 > 其他分享 >编译原理(清华大学版)第一章

编译原理(清华大学版)第一章

时间:2024-04-11 15:00:53浏览次数:30  
标签:语法分析 语义 清华大学 第一章 词法 编译 编译程序 源程序

第一章 概论

基本概念

 

词法分析

  • 经过词法分析器识别出Token,把字符串转化为一个个Token。

Token包括:关键字、标识符、界符等

语法分析

  • 把Token串转换成体现语法规则的抽象树(AST)

语义分析

  • 审查源程序有无语义错误

  • 找到变量的作用域

  • 识别执行的运算方式

  • 进行类型的检查

EBNF

 

第一章习题

  1. 什么是编译程序?为什么需要编译程序?

  2. 编译原理课程的主要内容是什么?

  3. 编译过程典型地被划分成哪几个阶段?各阶段的主要任务是什么?

  4. 编译前端和后端各有什么特点?各自包含编译过程的哪几个部分?

  5. 贯穿编译过程的两个工作是什么?各自的主要任务是什么?


答案:

  1.    - 从功能上看,一个编译程序就是一个语言翻译程序,是一个能把一种语言书写的程序翻译成另一种语言的等价程序

      - 一个编译程序的重要性体现在它是的多数计算机用户不必考虑与机器有关的繁琐细节,使得程序员和程序设计专家独立于机器。
  2.  

       - 介绍程序设计语言编译程序构造的一般原理、基本设计方法和主要实现技术。
  3.  

       - 词法分析程序:输入源程序,拼单词,检查单词和分析单词,输出单词的机内表达形式。

      - 语法分析程序:在词法分析的基础上,将单词组成各类语法短语并分析能否构成正确程序。

      - 语义分析程序:对语法分析所形成的各类短语分析其含义,进行语义审查。

      - 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

      - 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行加工优化处理。

      - 表格管理程序:负责建立,填写,查找等一系列表格管理工作。

      - 出错处理程序:处理和校正源程序中存在的语法、语义、词法错误。
  4.  

    - 1. 前端的工作主要依赖于源语言而与目标机无关。前端包括词法分析、语法分析、语义分析和中间代码生成,也包含某些优化工作。

    - 2. 后端指的是那些依赖于目标机而一般不依赖于源语言,至于中间代码有关的那些阶段的工作,即目标代码生成,以及相关出错处理和符号表操作
  5.  

     错误的诊察处理和符号表管理
    - 错误的诊查处理: 编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去。
    - 符号表管理:编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及构造、查找或更新有关的表格。

标签:语法分析,语义,清华大学,第一章,词法,编译,编译程序,源程序
From: https://www.cnblogs.com/graffiticode/p/18129209

相关文章

  • Item31:最小化文件之间的编译依赖
    芝士wa2024.4.11Item31链接引子“你进入到你的程序中,并对一个类的实现进行了细微的改变。提醒你一下,不是类的接口,只是实现,仅仅是private的东西。然后你重建(rebuild)这个程序,预计这个任务应该只花费几秒钟。毕竟只有一个类被改变。你在Build上点击或者键入make(或者其它等......
  • ZOMI的AI编译原理4
    为什么需要AI编译器面临的问题挑战类别描述算子挑战越来越多新算子被提出,导致算子库的开发、维护、优化和测试工作量指数上升。1.硬件不仅需要实现新算子,还需要结合硬件进行特性优化和测试,以充分发挥硬件性能。例如,对于Convolution运算,需要将其转换为GEMM矩阵乘......
  • 看不懂来打我,vue3如何将template编译成render函数
    前言在之前的通过debug搞清楚.vue文件怎么变成.js文件文章中我们讲过了vue文件是如何编译成js文件,通过那篇文章我们知道了,template编译为render函数底层就是调用了@vue/compiler-sfc包暴露出来的compileTemplate函数。由于文章篇幅有限,我们没有去深入探索compileTemplate函数是......
  • vue编译器
    ast-编译成代码import*aspathfrom'path'importtype{Plugin,ResolvedConfig}from'vite'import{NodePath}from'@babel/traverse';import{JSXElement}from'@babel/types';import{compile,generate,transform......
  • 《统计学习方法》第一章
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、统计学习分类1.基本分类1.1监督学习1.2无监督学习1.3强化学习1.4半监督学习和主动学习2.模型分类2.1概率模型与非概率模型2.2线性与非线性2.3参数化和非参数化模型3.算法分类4.技巧......
  • Java程序设计教程(第九版)第一章计算机系统概述
    目录本章目标1.1计算机处理过程硬件软件数字计算机模拟技术数字技术二进制数1.2硬件组件计算机结构输入/输出设备主存储器和辅助存储器中央处理器本章目标软硬件关系软件类型及用法核心硬件及作用硬件如何协同执行程序、管理数据如何共享信息初解Java程序编......
  • 如何让WSL2使用自己编译的内核
    目录wsl基本介绍以及安装编译内核下载linux源码使用wsl内核配置添加uvc内核驱动编译内核切换wsl内核重启内核最近有一个摄像头的项目,想着为什么不直接使用wsl呢。查阅了网络上大量的资料,修改了WSL2内核来支持UVCwsl基本介绍以及安装wsl(windowssubsystemforlinux)是wind......
  • 千万不要将centos中python 默认2.7的编译器改为3.x的,会出现File “ usr bin yum“, li
    千万不要将centos中python默认2.7的编译器改为3.x的,在使用yum时,会报各种错,1、File"/usr/bin/yum",line30  exceptKeyboardInterrupt,e:原因是yum按python3.6解析2.7的语法出错了修改/usr/bin/yum文件中的第一行为#!/usr/bin/python2.72、 File"/usr/libexec/url......
  • ZOMI的AI编译原理3
    LLVM设计架构LLVMIR与GCCIR对比特性LLVMIRGCCIR(GIMPLE)独立性和库化架构高度模块化,前端和后端分离,易于添加新语言和目标平台传统GCC架构,前端和后端耦合较紧密表达形式人类可读的汇编形式、C++对象形式、序列化后的bitcode形式GIMPLE表示形式,三地址代码,SS......
  • Notepad--文本编译工具推荐
    推荐一个全平台的文本、代码编辑工具Notepad--,支持Windows、Mac以及国产uos深度系统、redhat/ubutu/centos等系统。可以替换你目前手头使用的Notpad++,这个软件能不用就别用了,懂得都懂。废话不多说,附上Notepad--作者爬山虎的gitee链接ndd发行版-Gitee.com这个软件挺轻量化的......