第 1 题:词法分析
在网络安全与数据验证的应用中,经常需要检查用户输入的网址(URL)是否符合基本格式要求。合格的URL应该以合法的协议开头(如http或https),并包含有效的主机名(由字母、数字或横线组成,中间以点分隔)。这种验证可以通过正则表达式实现。
- 设计一个简易的正则表达式来匹配以下格式的URL:
- 以
http://或https://开头(即协议部分,其中https的s是可选的)。 - 协议后跟随一个主机名字符串,该字符串由多个部分组成,每个部分由字母(
char)、数字(digit)或横线(-)组成,部分之间以点(.)分隔。为简化问题,我们只考虑主机名由两部分组成:第一部分是任意长度(包括0)的字母、数字或横线序列,然后是一个点,第二部分是任意长度(包括0)的字母、数字或横线序列。
- 以
- 用Thompson算法将得到的正则表达式转成NFA的过程和结果;
- 用子集构造法进一步将NFA转成DFA的过程和结果;
- 进一步将DFA最小化的过程和结果。
第 2 题:语法分析
对于下面的上下文无关文法G:
S -> A B
S -> B A
A -> A a
A -> B c
B -> b B
B -> ε
- 给出消除左递归后的文法 G’ ;
- 画出文法 G’ 的 LL(1) 分析表,并判断其是否是 LL(1) 文法;
- 画出文法 G’ 的 LR(1) DFA 及分析表;
- 对于句子
bcca,画出用文法 G‘ 推导的符号栈和状态栈的变化过程。
第 3 题:语法制导翻译和语义分析
对于下面的上下文无关文法G:
F -> { B }
B -> B S
B -> S
S -> if S else S
S -> return
S -> stmt
- 设计一个SDD,判断每个语句是否保证从函数中返回(return);
- 对于上面的SDD,给出一段伪代码,能完成上述语言的语义分析。
- 对于下列语句,先画出语法树,再用SDD分析是否每个语句都能够从函数中返回(return)?
{
if return else stmt
stmt
}
第 4 题:中间表示和代码优化
对下面的原代码:
x = 0;
y = 10;
t = x;
for (i = 0; i < y; i++) {
a = 0;
a = t + 3;
x = x + t;
if (a > x) {
t = t - a;
}
}
x = t;
- 翻译成三地址码,然后划分为基础块并画出CFG;
- 进行到达定义分析和活性变量分析,利用所学知识进行代码优化;
- 对优化后的代码画出RIG图,并进行寄存器分配。
2614

被折叠的 条评论
为什么被折叠?



