1.程序语言概述

(1)程序设计语言的定义

语法:有程序设计语言的基本符号组成程序中的各个语法乘方的一组规则,其中由基本字符构成的符号书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。

语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。

语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源,使用和影响。

语境:理解和实现程序设计语言的环境,包括编译环境和运行环境。

2.编译程序基本原理

编译过程划分成 词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段。

(1)词法分析阶段:对源程序从前往后逐个字符进行扫描,从中识别出一个个单词符号。“单词”符号是程序设计语义的基本语法单位,如“关键字”、“标识符”等。词法分析程序输出的“单词”常常采用二元组的方式,即单词类别和单词自身的指。

(2)语法分析阶段:语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类的语法单位,如“表达式”、“语句”、“程序”等,词法分析和语法分析本质上都是对源程序的结构进行分析。

(3)语义分析阶段:主要是审查源程序示法存在语义错误,并收集类型信息后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查。
描述程序语义的形式化方法主要有属性文法、公理语义、操作语义和指称语义等。其中,属性文法是对上下文无关文法的扩充。

3.正规式与有限自动机

如何转换?

其中 “|” 这个符号表示 “或”
“*”符号表示“闭包”,表示“一个或多个”。

相关题目

(1)在仅有字符a、b构成的所有字符串中,其中以b结尾的字符串集合可用正规式表示为______

A.(b|ab)*b B.(ab*)*b C.a*b*b D.(a|b)*b

【答案】D

【解析】注意,题目要求仅有a、b构成的所有字符串。那么可以产生的是aa、bb、ab、ba。最后再加上b结尾。

A选项,能产生bbb、ababb、babb…. 不能产生aa
B选项,ababb、abbb…. 也不能产生aa
C选项,aabb、abb…能产生aa、bb、ab但是不能产生ba
D选择,abb、aab、bbb、bab…能产生aa、bb、ab、ba。所以选D。

(2)由字符a、b构成的字符串中,若每个a后面至少跟一个b,则该字符串集合可用整个个式表示为_______

A.(b|ab)* B.(ab*)* C.(a*b*)* D.(a|b)*

【答案】A

【解析】

A选项:正规式(b|ab)表示正规集为{b,ab}, {b|ab}*表示的正规集为{空,b,ab,bb,bab,abb,abab,bbb,bbab,babb,babab,abbb,abbab,ababb,ababab,…..},用自然语言描述就是每个a后面至少有1个b。
B选项:正规式(ab*)表示的正规集{空,a,ab,abb,abbb,abbb,…},(ab*)*表示的正规集为{aa,aab,aabb,aabbb,aabbb,aba,abba,abbba,abab,abbab},用自然语言描述就是除了空串,每个串中至少有1个a。
C选项和D选项是等价的,它们都表示{空,a,b,aa,ab,ba,bb,aaa,aab,aba,ab,baa,bab,bbb….},用自然语言描述就是用a、b构成的任何字符串。

(3)语法制导翻译是一种()方法。

A.动态语义分析 B.中间代码优化 C.静态语义分析 D.目标代码优化

【答案】C

【解析】语义分为动态语义和静态语义。其中,静态语义分析方法是制导翻译,其基本思想是将语义结构的语义以属性的形式赋予代表此结构的文法符,而属性的计算以语义规则的形式赋予文法的产生式。