程序设计语言概述
💧后续补充
语言处理程序基础
语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。
汇编程序基础原理
编译程序基本原理
🍁编译程序的功能是把高级语言书写的源程序翻译与之等价的目标程序(汇编语言或者及其语言)
各个阶段:
🍀词法分析:源程序可以简单地被看成一个多行的字符串,词法分析阶段是编译过程的 第一个阶段这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号,“单词”符号是程序设计语言的基本语法单位,如关键词(或称保留位),标识符,常数,运算符和分隔符(如标点符号,左右括号)等。
🍀语法分析:语法分析的任务是词法分析的基础上,根据语言的语法规规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。
🍀语义分析:语义分析阶段分析各语法结构的含义,检查源程序是否包含静态语义(一类程序形式语义。涉及到程序形式合法性的检查,与编译时的各种动作对应,它与程序运行时所需的输入无关。)错误,并收集类型信息后面的代码生成阶段使用。只有语法和语义都正确的源程序才能翻译成正确的目标代码。
🍀中间代码生成的工作是根据语义分析的输出生成中间代码,“中间代码”是一种简单且含义明确的记号系统。
🍀代码优化: 由于编译器将源程序翻译成中间代码的工作是机械的,按固定模式进行的,因此生成的中间代码往往在时间上和空间上有较大的浪费。
🍀目标代码生成:目标代码生成是编译器工作的最后一个阶段,这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码,可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
🍀符号表管理:符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译的过程中需要对符号表进行快速有效的查找,插入,修改和删除等操作。
🍀出错处理: 用户编写的源程序不可避免地会有一些错误,这些错误大致可分为静态错误和动态错误
文法
🍅一个形式文法是一个有序四元组G=(V,T,S,P) 其中:
💧 V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
💧 T:终结符。是语言的组成部分,是最终结果。 V ∩ \cap ∩T= ∅ \emptyset ∅
💧 S:起始符。是语言的开始符号。
💧 P:产生式。用终结符替代非终结符的规则,形如α→β
正则闭包:A+=A1∪A2∪A3∪A4∪A5∪A6∪A7…∪An∪…也就是所有幂的组合。
闭包:A*=A0∪A+(在正则闭包的基础上,加上A0={ε})
类别 | 别称 | 说明 | 对应自动机 |
---|---|---|---|
0型 | 短语文法 | G的每条产生式α -> β 满足a输入V的正则闭包,且至少含义一个非终结符,而β输入V的闭包。 | 图灵机 |
1型 | 上下文有关文法 | G的任何产生式α -> β满足|α|<=|β|,仅仅S -> ε 例外,但S不得出现在任何产生式右部 | 线性界限自动机 |
2型 | 上下文无关文法 | G的任何产生式A -> β,A为非终结符, β 为 V 的 闭包 | 非确定的下推自动机 |
3型 | 正规文法 | G 的任何产生式A -> αB 或者A -> α,a 输入非终结符的闭包,A, B 都是输入非终结符 | 有限自动机 |
有限自动机
🌀一个有限自动机所识别的语言是从开始状态到终止状态所有路径上的字符串的集合。要判断一个字符串能否被指定的自动机识别,就看在该自动机的状态图中能否找到一条从开始状态到达终止状态的路径,且路径上的字符串等于需要识别的字符串。