职责:负责Smart C()mpiler前段的开发与维护。
试题:
(一):编译器的兼容性有两方面,前段兼容性是指编译器所能支持的语言数目。后段兼容性是指所能支持的目标机数目。如何可以提高编译器的兼容性?
(二):传统的两端式架构将编译器分为前端后端两大模块组,阐述一下这种架构的缺点。
(三):请用形式化语言描述一下编程语言的共同点。
(四):请用描述一下目标机器的共同点。
(五):如果让你实现一个C语言编译器,除支持完整的C99标准之外,允许C于JAVA混合编程,你会如何实现?
(六):词法分析器基于自动机理论由若干组状态函数S1=F(SN,α)构成,请阐述如此实现的好处。
(七):词法分析器返回值是一个二元组<词法值,词素>,词素是一个串表示语言中的符号,如变量等等。词法值表示其词性。该返回值由谁接受?如此封装(二元组<词法值,词素>)的好处是什么?
(八):LR分析器的实现难点在哪?
(九):LL分析器的缺点在哪?
(十):语法分析器的输入跟输出分别是什么?
(十一):代码生成器的输入是什么?
(十二):何谓指令编码?
(十三): 已知某机器某条指令的编码模式如下,请为指令"ADD R0,R1,2”编码,并给出16进制机器码。
以上 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 ;
}
(十六):连接器如何重定位符号地址?
请将答案发至: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.
突壳开源
http://www.tok.cc