薇薇宝贝 2008-6-8 16:30
学过高级编译原理的前辈请进!~急急
[size=5][color=navy]请教各位前辈~rf_301_: [/color][/size]
E!O0~"}"Y.@ b5t4z
[size=5][color=navy][/color][/size] ~#`)]0K!I N\
[size=5][color=navy]请问编译原理里的runtime(GC,Exception,Chargement)是什么?:em2600: [/color][/size]
t-VP
] mW8yV?
[size=5][color=navy]有什么作用啊?[/color][/size]
~9cV O
]Ye
[size=5][color=navy]他是在编译过程中的哪个部分呢?[/color][/size]
M'wlo'@
[size=5][color=#000080]还有machine abstraite:3211: ,有哪位前辈能帮我解释下么?[/color][/size]
bEj~T-ky!v&m
[size=5][color=#000080][/color][/size]
v(q1lv,N5pfv
[size=5][color=navy]有没有前辈有这方面的材料,能贡献下么?:em2400: [/color][/size]
m'c[
ZC
X,Gg(j
[size=5][color=navy][/color][/size] XG}T)p)t.cd9O6v
[size=5][color=navy]先谢谢了~~!!!!!!:em0007: :em0007: :em0007: [/color][/size]%Xg{6d,R
e
[size=5][color=#000080]p.s: 在线等哦^^[/color][/size]
zhangtuo1983 2008-6-8 17:03
machine abstraite
c&u~b,|RtUzy
h
T&FZ }GE)u
是不是虚拟机啊。我也不确定。
2IHdp;| ux1J
3年前学的编译。。。忘得差不多了(rf12rf) (rf12rf)
zhangtuo1983 2008-6-8 17:10
GCC GNU Compiler Collection4ni(LO6b0_&X
o6m4VNYa
Xj
Ls|;q$RH
est le compilateur créé par le projet GNU. Il s'agit d'une collection de logiciels libres intégrés capables de compiler divers langages de programmation, dont C, C++, Objective-C, Java, Ada et Fortran.
薇薇宝贝 2008-6-8 17:17
谢谢楼上的前辈,machine abstraite是虚拟机啦,但对于他的作用,我不大清楚。。。。。[soT5BX/|
GC是垃圾处理~但我不知道他在编译的那个阶段。。。。。
zhangtuo1983 2008-6-8 17:25
un moteur d'exécution(runtime) comprend tout le code et toutes les données du langage dont un programme pourrait avoir besoin pendant son exécution. Chaque implémentation d'un langage ou d'une famille de langages fournit donc en général un moteur d'exécution pour les programmes qu'elle va compiler et/ou interpréter.
-ajaHe2f(m
)c@ P }'wu+M
个人认为是贯穿词法语法 语义分析三个阶段的。
zhangtuo1983 2008-6-8 17:30
回复 4F 的帖子
代码优化阶段吧。。
buried 2008-6-8 17:38
runtime 是指运行环境,从你给的要求来看,应该是指的虚拟机,因为只有虚拟机才比较好实现GC和异常处理。machine abstraite就是虚拟机。Chargement不知道法语是什么意思,如果是指“负载”的话估计是指架构设计好一点,不要开销太大;如果是指“装载”的话,估计是指要求支持link(此项工作做的好与不好的关键在于指令集的设置、注意在语义处理的时候始终保持相对地址的概念(尤其是在处理指针和引用的语义的时候)以及简单翻阅一下连接器的原理即可)
"k+Y3aH1]"|G
4J+b2_Kf-U)E
建议分成两部分做,第一部分是定义虚拟机的指令集(主要考虑支持的寻址方式、运算类型和路径转移,设计的时候可以参看X86(如果有精力的话可以直接参照MASM的宏,但是这样会涉及到通用寄存器的置换问题,如果时间充足且作业不要求做优化可以考虑;没有精力就自己找一个单片机(不要ARM)的指令集来COPY,不过可能还是会改动一点,因为不知道你要编译的上层语言是什么));第二部分才是按照EBNF来做对应的文法和语义的识别,如果没有要求手工代码,完全可以用现成工具,非常快(估计学习使用10小时,做10小时,C类的用YACC,java用JAVACC),如果是手工的话估计需要1周的时间(约60小时)。Ljog$C
mB:gKSh5q^J
PS
/Fg#?,fcv8nF(w
1.如果要求优化中间代码,建议以4元式的形式,感觉要比3元式来的方便5Hd^ C?(]:@8|
2.如果要求GC和异常的话,估计是类JAVA的EBNF,一定注意在符号表设计的时候,要考虑static成员的内存关系
o
C;Yt
eQ(I
3.做GC的时候,如果不要求分代和效率,就尽量按笨办法从简吧(不要去参照什么XX论文),不然到时候会相当郁闷,而且出了毛病很难调试S \@@)k5o
S
4.本来写过,有代码,可惜,在公共的机器上被不知道的XX给格掉了……为了装游戏……所以……你只能自己写了{U\];~ M
5.资料感觉能借鉴的不多,都是原理,唯一有印象的是好像是吉大的,有一本绿色的书,名字我忘了,搜“编译”应该能找到,上面对符号表的设计讲了很多很实用的东西。!f S O
Y
M3W
6.这个工作量不一般,完全自己自足的时候请提前做好心理准备
薇薇宝贝 2008-6-8 22:12
谢谢~前辈的指点,我现在不要做projet啦~
+J`~
Ya6U7z
kGoe;l
这个学期学高级编译原理,因为原来完全没有基础。。。。。8Uik]C@|
所以连runtime,和虚拟机的基本概念都不清楚。。。。。
薇薇宝贝 2008-6-8 22:18
[quote]原帖由 [i]zhangtuo1983[/i] 于 2008-6-8 17:25 发表 [url=http://bbs.revefrance.com/redirect.php?goto=findpost&pid=12154840&ptid=521257][img]http://bbs.revefrance.com/images/common/back.gif[/img][/url] un moteur d'exécution(runtime) comprend tout le code et toutes les données du langage dont un programme pourrait avoir besoin pendant son exécution. Chaque implémentation d'un langage ou d'une famil ... [/quote]
{N Rp#Y.X
大概明白runtime了rf_311_: 谢谢!!~
薇薇宝贝 2008-6-8 22:19
虚拟机的概念和作用,前辈们能再解释下不?因为我在网上找不到什么好的解释呢rf_310_:
michelle_jiajia 2008-6-8 23:55
ocaml或者java的MV作用就是把人写的代码翻译成bytecode,然后运行,用16进制方式显示.class或者.cmo之类的文件时,每一组16进制代码对应一个MV语句。&k\rEP|"qt4a
每一种MV都有自己的结构,都得有寄寸器,栈之类的工具来做控制,这涉及到具体的MV实现方法。x?2Z$dU
gk
cq/H{t'r2K
参考JVM
b-y(_H8{XX
[url]http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html[/url]
SQ7m'K0W/?n vm)k
W
Ocaml VM
)^p `9nw(E6z#Z@1{
[url]http://pauillac.inria.fr/~lebotlan/docaml_html/french/french003.html[/url]
wukw 2008-6-9 03:42
GC,-- 垃圾收集。一般有3到5种算法,我收集了一些中文的文章,留下mail发给你。
wxPH0Q&Y!mc
&t5G{%IH
Exception -- 对于程序异常的管理,如何捕捉异常,如何恢复到异常发生前的状态,等等&C"MC_u/Y)F
o
~2O8GG9cr$d
Chargement -- 不清楚
$U+`,BqA5O0eE3Z
7n~4mp/p2q
Runtime -- 我的理解是,用来分析、解释并执行你所写的代码。主要管的是语义分析sementique这一块,也就是管你写的代码是到底“干什么”的。A6CMDZ2sAWOb
lF q&I6A)q
machine abstraite -- 我的理解是“抽象机”,不是虚拟机。大概意思是,一门没有具体实现的抽象逻辑语言,比如这门语言只有4句语句,然后让你组织完成某个功能等等。(不过我在国内也没学过compilation,所以不清楚到底是不是这么翻译。)i2m/^8a
k~|
J6t1o:I-Q;_
JVM -- Java 虚拟机。凡是虚拟机,你可以认为是一个小型操作系统(骑在主操作系统头上),来解释某一门语言所编译出来的中间代码(bytecode)。这就是JVM为什么理论上不仅仅可以支持运行Java,而且可以执行很多其它语言,比如python,ruby等等,不过很多人批评JVM对于多语言的支持做的不好。MS的.net语言也是这个道理,所以能同时支持C#,VB,VC,python等等。
#Z1SShu
ywDd:E m
胡扯一通,说错了别骂我就是~(rf2rf)
buried 2008-6-9 07:59
虚拟机的概念和作用
一般意义上的虚拟机和runtime的概念比较抽象 大致就是 一层壳的正反面,所有的上层对下层的封装都可以看成是一个虚拟机,反之下对上就是runtime,比如指令集是微代码的虚拟机,倒过来微代码就是指令集的runtime,操作系统API是指令集的虚拟机,JVM、.net CLR是操作系统API的虚拟机,用户级代码和库是所在runtime的相关接口的虚拟机,以此类推XAuLur4F.[3VG
N;NIe^,f-i
你所要求的虚拟机就是操作系统API的虚拟机,负责解释执行你编译后生成的中间代码或指令序列(把你的中间代码变成相应的操作系统的API集合执行),由于一般意义上的runtime是操作系统定义的保护模式和用户模式(简单理解就是操作系统的API),因此你可以把虚拟机理解成为一个简单的解释器,这个解释器不做语法分析工作,仅仅单纯的执行而已,换句话说,这个虚拟机是把解释执行语言的执行部分单独提出来做,而解释部分交给了和这个虚拟机配套的编译系统;BBr;rc-rsBFid
[4@3_,Pb,ie
JAVA 和 .net的例子应该可以帮助你理解这个概念 用户端代码经过编译变成字节码或CLI,这个字节码就是JVM需要执行的上层指令集,同理.net CLR和CLI的关系也是一样,对于JVM和.net CLR而言,下层都是操作系统的API(这种情况正好反映了 为什么JVM在不同的操作系统下有不同的版本,而.net目前只局限于windows框架下)(t~l5^]
o K\[:S ATt4Q
PS
7O.cRPeuYx
莫非你们的编译原理只需要搞懂原理,不用实际做一个?真是幸福啊……
zhangtuo1983 2008-6-9 10:01
回复 13F 的帖子
LS知识学的很扎实啊
,[;F2qL*y2B1\(}d
国内学是需要做一个的,稀里糊涂就混过去鸟。现在什么都没剩下(rf7rf)
页:
[1]