免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4202 | 回复: 9
打印 上一主题 下一主题

《突壳开源》编译小组的招募试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-20 17:53 |只看该作者 |倒序浏览
本帖最后由 TOK_Wang 于 2011-01-29 10:19 编辑

职责:负责Semo 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,与你联系哦。


Semo C()mpiler是由突壳开源开发的一个编译框架,基于独创的架构使得该编译器在兼容性方便性能突出,如在该编译框架下实现一门全新的语言只需要提供一个相应的前段即可。项目发起日为二零零八年二月,前后经过两年的开发目前SC整体架构已经完成,我们欢迎各位有识之士加入到开发队伍为开源基础软件贡献一份力量。

我们的产品:

2008 – 2009 : Semo 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 : Semo Compiler 0.2.0 , A Compiler Frameworks.


突壳开源
http://www.tok.cc

论坛徽章:
0
2 [报告]
发表于 2010-07-21 09:34 |只看该作者
(一):编译器的兼容性有两方面,前段兼容性是指编译器所能支持的语言数目。后段兼容性是指所能支持的目标机数目。如何可以提高编译器的兼容性?
Pathscale用GCC4.2.1的FE,IntelCC是买的FE,您老这个FE咋兼容啊?
BE,麻烦您老甭那么多错别字好么?一个IR,FE-AST-IR-BE-TargetDesciption,主流编译器都是这样的设计的。要我继续给你列举代码么?
(二):传统的两端式架构将编译器分为前端后端两大模块组,阐述一下这种架构的缺点。
这种结构已经死了,lcc那玩意儿能叫compiler?GCC2.x的早期版本可能还这样,麻烦不要拿历史上丢进垃圾桶的东西说事儿好不?
(三):请用形式化语言描述一下编程语言的共同点。
形式化语言。。。BNF?
(四):请用描述一下目标机器的共同点。
Target?麻烦您老注明一下,除了现在的x86这样的寄存器机器,还包括stack机器么?那么VLIW的DSP呢?MultiCore的调度呢?标量呢?
(五):如果让你实现一个C语言编译器,除支持完整的C99标准之外,允许C于JAVA混合编程,你会如何实现?
您老是想自己搞一套非主流的标准,还是想实现JNI啊?JNI的规范SUN解释的很清楚了。GCC里面的gcj是把Java处理成GIMPLE一样的跑。我们的IR都一样,而且照样支持JIT。您老想要啥?
(六):词法分析器基于自动机理论由若干组状态函数S1=F(SN,α)构成,请阐述如此实现的好处。
理论指导实践?去教室拉个背书好的学生吧。
(七):词法分析器返回值是一个二元组<词法值,词素>,词素是一个串表示语言中的符号,如变量等等。词法值表示其词性。该返回值由谁接受?如此封装(二元组<词法值,词素>)的好处是什么?
理论指导实践?去教室拉个背书好的学生吧。
(八):LR分析器的实现难点在哪?
不是难度,没有任何难度,是表太大,内存装不下,我真的觉得您老很厉害啊。
(九):LL分析器的缺点在哪?
有啥缺点?慢么?麻烦别总纯理论出发,LL实现的简单,运行起来并不比LALR慢。
(十):语法分析器的输入跟输出分别是什么?
token
(十一):代码生成器的输入是什么?
IR
(十二):何谓指令编码?
你老指的是ISA?还是x64那样的bit编码?
(十三): 已知某机器某条指令的编码模式如下,请为指令"ADD R0,R1,2”编码,并给出16进制机器码。以上 Rn、Rd 最大值7。immed_3 最大值3。
麻烦您老说明一下是ARM指令不?还是您老的非主流CPU?
(十四):请设计一个算法将以下表达式翻译成中间代码(见下)。
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 ;
}

基本块儿识别?对不起,这种手段太落后了。

(十六):连接器如何重定位符号地址?
ELF提供了一堆符号的操作函数,麻烦自己去看一下好么?

请将答案发至:wqw85@sina.com,我们会与你联系。
我不想mail,想看自己来看。

Smart C()mpiler是由突壳开源开发的一个编译框架,基于独创的架构使得该编译器在兼容性方便性能突出,如在该编译框架下实现一门全新的语言只需要提供一个相应的前段即可。项目发起日为二零零八年二月,前后经过两年的开发目前SC整体架构已经完成,我们欢迎各位有识之士加入到开发队伍为开源基础软件贡献一份力量。
GCC LLVM Path64这么多主流的开源编译器,为啥非参加你这个啊?
招募?给多少钱?没钱让别人白干活?还没啥意义。开源基础软件贡献一份力量,利益是谁的?这样做真的是开源基础软件贡献一份力量么?

论坛徽章:
0
3 [报告]
发表于 2010-07-21 10:50 |只看该作者
GCC LLVM Path64这么多主流的开源编译器,为啥非参加你这个啊?
招募?给多少钱?没钱让别人白干活?还没啥意义。开源基础软件贡献一份力量,利益是谁的?这样做真的是开源基础软件贡献一份力量么?


纠正几点:

(1)是“我们”,不是“我”。
(2)关于“给不给钱”的说法,这个项目是基于GPL协议发布的,谢谢。
(3)关于“招募”不是“招聘”。

其它,不做任何评论,真心的请发至email。

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2010-07-21 12:46 |只看该作者
> C()mpiler

这个,怎么读?

论坛徽章:
0
5 [报告]
发表于 2010-07-21 12:49 |只看该作者
本帖最后由 prolj 于 2010-07-21 12:53 编辑

渔夫,人64的人还真不把gcc放在眼里。Path的代码结构清晰不少,代码还是一样的感觉。要不你今年找几个open的人讲讲?给我们学习一下先进生产力。

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
6 [报告]
发表于 2010-07-21 15:31 |只看该作者
我跟gcc没关系,跟64更没关系,哈哈

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
7 [报告]
发表于 2010-07-24 10:41 |只看该作者
职责:负责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.

论坛徽章:
0
8 [报告]
发表于 2010-07-25 22:02 |只看该作者
HI~~大家~感兴趣的话发邮件吧,非诚勿扰,thx。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
9 [报告]
发表于 2010-07-27 17:44 |只看该作者
楼主您好,已收到您的站内短信,十分感谢。

最近想写一个可以商用的WebServer(至少目标是这样),正在解析The Fuck HTTP Header,怕是没有什么时间了(最主要是想优化到最好)
很早很早以前写过一个CASL编译器,发表在Linuxsir.org中了...现在对于编译原理,基本忘光了。
等我写完手上活,如果有时间,复习一下编译原理再与您联系。

中国的Free的编译器项目很少有人做,总该有个人吃螃蟹,祝您成功。

PS:相比起来,天天叫着国产OS的倒不少。

论坛徽章:
0
10 [报告]
发表于 2010-07-27 22:00 |只看该作者
folklore兄多谢支持~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP