HNU 编译系统押题卷

第 1 题:词法分析

在网络安全与数据验证的应用中,经常需要检查用户输入的网址(URL)是否符合基本格式要求。合格的URL应该以合法的协议开头(如httphttps),并包含有效的主机名(由字母、数字或横线组成,中间以点分隔)。这种验证可以通过正则表达式实现。

  1. 设计一个简易的正则表达式来匹配以下格式的URL:
    • http://https://开头(即协议部分,其中httpss是可选的)。
    • 协议后跟随一个主机名字符串,该字符串由多个部分组成,每个部分由字母(char)、数字(digit)或横线(-)组成,部分之间以点(.)分隔。为简化问题,我们只考虑主机名由两部分组成:第一部分是任意长度(包括0)的字母、数字或横线序列,然后是一个点,第二部分是任意长度(包括0)的字母、数字或横线序列。
  2. 用Thompson算法将得到的正则表达式转成NFA的过程和结果;
  3. 用子集构造法进一步将NFA转成DFA的过程和结果;
  4. 进一步将DFA最小化的过程和结果。

第 2 题:语法分析

对于下面的上下文无关文法G:

S -> A B
S -> B A
A -> A a
A -> B c
B -> b B
B -> ε
  1. 给出消除左递归后的文法 G’ ;
  2. 画出文法 G’ 的 LL(1) 分析表,并判断其是否是 LL(1) 文法;
  3. 画出文法 G’ 的 LR(1) DFA 及分析表;
  4. 对于句子bcca,画出用文法 G‘ 推导的符号栈和状态栈的变化过程。

第 3 题:语法制导翻译和语义分析

对于下面的上下文无关文法G:

F -> { B }
B -> B S
B -> S
S -> if S else S
S -> return
S -> stmt
  1. 设计一个SDD,判断每个语句是否保证从函数中返回(return);
  2. 对于上面的SDD,给出一段伪代码,能完成上述语言的语义分析。
  3. 对于下列语句,先画出语法树,再用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;
  1. 翻译成三地址码,然后划分为基础块并画出CFG;
  2. 进行到达定义分析和活性变量分析,利用所学知识进行代码优化;
  3. 对优化后的代码画出RIG图,并进行寄存器分配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值