编译原理拉链回填技术c语言,编译原理笔记1:概述编译相关的基本知识

本文是编译原理学习笔记,介绍了编译器的工作步骤,包括词法分析、语法分析、语义分析等,并讲解了Lex和Yacc工具在编译器开发中的作用。同时,讨论了编译器与解释器的区别,以及拉链回填技术在处理先引用后声明情况的应用。
摘要由CSDN通过智能技术生成

本系列为个人编译原理学习笔记,谬误之处恳请高人指点,感激不尽!

内容整理自西安电子科技大学 王小兵、张南、鱼滨老师的编译原理课程。

编译器的工作步骤

在开始说任何东西之前,我们先来大致看一下编译器是怎么工作的——从代码到程序,大概要经过下面这样的步骤——这里用粗浅的语言进行解释,先有个印象即可,后面还会提到

019eb2f1d349

词法分析:编程语言的语句,由一堆堆的单词组成——比如变量类型名、变量名、函数名、值、符号等。既然我们要让机器来分析源程序然后编译,那么就需要首先让计算机能够明白我们写的语句是什么意思,而理解语句的第一步就是理解每个词。所谓词法分析,进行的工作就是让计算机识别单词;

语法分析:完成词法分析,就要通过语法分析来识别语句的结构;

语义分析:该步骤的目标,就是确定“某一条语句是什么意思”,检查一下说的有没有不合法的地方;

符号表管理:相当于字典。符号表用于各个阶段查找、填写;

出错处理:在出现错误时的处理。种类可分词法错误、语法错误、静态/动态语义错误;

中间代码(可选)可以为优化提供支持。中间代码接近于目标语言,却又与具体硬件对应的机器指令无关,便于优化和代码生成。中间代码优化是对指令进行等价变化,提高运行效率;

中间代码经过优化,就可以生成目标代码了。比如二进制程序的机器码,或者各种 VM 用的字节码。

词法分析器 Lex 和词法分析器 Yacc:

Lex(Lexical Analyzar) 是词法分析器, Yacc(Yet Another Compiler Compiler) 是语法分析器。

虽然从名字上看,这两个东西就已经是“分析器”了,然而实际上并不是,他们是用来生成“分析器”的工具。Lex 是用来生成词法分析器的工具,Yacc 是用来生成语法分析器的工具。

这两个工具可以根据我们输入的词法 / 语法规则,自动生成相应的语法分析器、词法分析器,然后这些分析器就可以帮助我们简单地完成对源代码的词法、语法分析。

因这两样工具的存在,开发编译器、解释器的词语法分析器的难度被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值