- 论坛徽章:
- 59
|
职责:负责Smart C()mpiler前段的开发与维护。
试题:
(一):编译器的兼容性有两方面,前段兼容性是指编译器所能支持的语言数目。后段兼容性是指所能支持的目标机数目。如何可以提高编译器的兼容性?
>>生成机器无关的中间码~~~不过这将要牺牲某些特性,比如C的Embed ASM。对此可特别对待。
(二):传统的两端式架构将编译器分为前端后端两大模块组,阐述一下这种架构的缺点。
>>比较慢,一般架构也较大,生成中间文件,但个人认为好处要比缺点多得多,比如简单易理解等等。
(三):请用形式化语言描述一下编程语言的共同点。
>>这个。。。不知什么意思,没想到编程语言有什么共同点,一定要说有,是:无岐义性。
(四):请用描述一下目标机器的共同点。
>>倒...,都有质量,都是存在的实体(目标机器不可能有共同点的,现存的机器倒有一个,就是程序控制);
(五):如果让你实现一个C语言编译器,除支持完整的C99标准之外,允许C于JAVA混合编程,你会如何实现?
>> 这个看起来像C++的山寨版。实现一个非标准的C++即可,实话说,我很难做到。
(六):词法分析器基于自动机理论由若干组状态函数S1=F(SN,α)构成,请阐述如此实现的好处。
>>这个比较快,易于实现及DEBUG
(七):词法分析器返回值是一个二元组<词法值,词素>,词素是一个串表示语言中的符号,如变量等等。词法值表示其词性。该返回值由谁接受?如此封装(二元组<词法值,词素>)的好处是什么?
>>由构造符号表的程度接受。>>好处是提供了完整的信息,词法分析只要一次遍历即可。
(八):LR分析器的实现难点在哪?
>>构造一个无岐义的,无递归的LR分析器,并使之完全符合目标语法;
(九):LL分析器的缺点在哪?
>>在向前看时,可能会产生岐义(对于某些语言)
(十):语法分析器的输入跟输出分别是什么?
>> 源代码+符号表-->语法树
(十一):代码生成器的输入是什么?
>> 语法树+操作码
(十二):何谓指令编码?
>> 就是有一定结构无岐义编码
(十三): 已知某机器某条指令的编码模式如下,请为指令"ADD R0,R1,2”编码,并给出16进制机器码。
可以是:00FF,00为指令码,FFFF为R0,R1及Immed的代码位置,各有3:3:2Bit,合计8BIT
以上 Rn、Rd 最大值7。immed_3 最大值3。
写代码的不做~~~
(十四):请设计一个算法将以下表达式翻译成中间代码(见下)。
void gtkings () {
int a ;
int a ;
int b ;
int c ;
int d ;
int e ;
int f ;
int g ;
int h ;
a = a*a+((a+a/b>>e+f*g)+a*a&&d-d);
}
T.1 = a*a;
T.2 = b>>e;
T.3 = a/T.2;
T.4 = f*g;
T.5 = T.3+T.4;
T.1 = a+T.5;
T.2 = a&&d;
T.3 = a*T.2;
T.4 = T.1+T.3;
T.1 = T.4-d;
T.2 = T.1+T.1;
a = T.2 ;
(十五):请设计一个算法为以下代码生成标号,并不破坏其控制流程的完整。
function(){
int a;
if ( a+a ){
if(a+a){
if (a+a) {
} else if(a+a) {
}
}
} else if ( a+a ){
if(a+a){}
}
a = a+a;
}
function()
{
L0:
STACK 4 a = 0 ;
L1:
T.1 = a+a;
if ( T.1 ) FALSE goto L5:
L2:
T.1 = a+a;
if ( T.1 ) FALSE goto L7:
L3:
T.1 = a+a;
if ( T.1 ) FALSE goto L4:
goto L7:
L4:
T.2 = a+a;
if ( T.2 ) FALSE goto L7:
goto L7:
goto L7:
goto L7:
L5:
T.2 = a+a;
if ( T.2 ) FALSE goto L7:
L6:
T.1 = a+a;
if ( T.1 ) FALSE goto L7:
goto L7:
goto L7:
L7:
T.3 = a+a;
a = T.3 ;
}
(十六):连接器如何重定位符号地址?
可以是:产生一个重定位段,指出需重定位的代码的各个位置,Load时重新“生成”代码。
请将答案发至:wqw85@sina.com,我们会与你联系。
Smart C()mpiler是由突壳开源开发的一个编译框架,基于独创的架构使得该编译器在兼容性方便性能突出,如在该编译框架下实现一门全新的语言只需要提供一个相应的前段即可。项目发起日为二零零八年二月,前后经过两年的开发目前SC整体架构已经完成,我们欢迎各位有识之士加入到开发队伍为开源基础软件贡献一份力量。
我们的产品:
2008 – 2009 : Smart Compiler 0.1.0 , A Compiler Frameworks.
2008 – 2009 : REEC 1.0 , A Regular Express Engine for C Lanugage.
2010 – 2010 : REEC 2.0 , A Regular Express Engine for C Lanugage.
2010 – 2010 : ARM-ELF Based Dynamic Linking.
2009 – NOW : Smart Compiler 0.2.0 , A Compiler Frameworks. |
|