❶ 如何编写自己的编译器
我晕,你们老师真NB,你学的什么语言啊?是c吗?上来就让你做个编译器,你们老师吃错药了吧?
我大学同学毕业设计才是做个编译器,那会那俩人合作做的,还都是我们系公认的c最强的两个,合作还做了半年,你认为大一刚上来就做这个?!
❷ 用java做一个java的编译器
Javac编译器读取Java源代码,并将其编译成字节代码,说的直白一点就是把java语言翻译成计算机可以识别的二进制代码。
java的编译器有很多种,有sun公司的jdk,有oracle的jdk,还有其他一些公司的,多采用sun公司的jdk。
java同时需要集成开发环境,它集成了java的编译器,让我们不必通过命令行来编译java类文件,通过它我们可以快速的开发我们需要的程序。目前用的比较多的集成开发环境有eclipse和myeclipse,eclipse有很多具有针对性的版本来应对不同的开发,而myeclipse则是相对来说功能比较全面,当然也需要购买,个人建议myeclipse。
❸ 编译器具体实现中比较巧妙的思想有哪些
要说编译器实现的巧妙思想,很多都是用来解决工程性问题的,跟编译原理中的算法(解决抽象概念问题 / 学术问题)未必有直接关系。
题主是更想知道某个算法在具体实现中的特点或者说应用方式呢,还是更想了解工程方面的问题呢?
我觉得前者应该有很多人会给出非常有趣的回答,我就主要回答后者的方面吧。解决工程性问题的巧妙技巧也挺吸引人的,而且有非常大量的素材…根本无法列举完。
LLVM
说到编译器实现,不得不落个俗套说说LLVM编译器套件。不用介绍LLVM是啥了,感觉是“地球人都知道”系列。
1、一套IR,三种表现形式:运行时表现形式(llvm/IR,内存中)、序列化表现形式(bitcode,用于存储)、文本表现形式(“LLVM汇编”,便于人阅读和编辑)。三种形式间可以无损变换是LLVM非常非常强大的实现特点之一。
实际使用时能否真的达到无损变换很大程度上取决于要实现的语言有多少东西无法用LLVM IR表达。
例如说如果有语言实现基于LLVM来实现JIT编译器,并且想把一个运行时的对象指针当作常量嵌入生成的代码里,它可以把这个常量构造成LLVM IR,但如果把这个常量序列化到bitcode或生成文本形式,等“下一次编译”再读出来用的话,那个常量指针可能已经不对了。这跟生成PIC(position-independent code)的问题类似,但LLVM没办法帮语言解决这种问题。
也有可能有些语言实现偷懒,有些嵌入LLVM IR的metadata无法无损转换为文本形式,这也不能怪LLVM IR不好,但确实是使用中要头疼的问题…
这种一套IR三种表现形式的设计非常实用,一些新的语言实现项目受其影响也采用了类似的设计。
❹ 制作一个简单的编译器
还能编译汇编。。。
我晕。。。
我想这个不是一般人可以做到的,祝你好运!
如果你仅仅针对文本编辑器的话就好办了。
❺ 编译器的实现
.begin
.org 2048
main: ld [a],%r1
!if (a==2)
subcc %r1,2,%r0
bne else
sll %r1,2,%r1
ba done
!false c=a/2
else: srl %r1,1,%r1
done:st %r1,[c]
halt
a:2
c:0
.end
❻ 如何自己实现一个编译器
1、编译器有很多种,每一种的使用方式不尽相同。常用编译器:
Visual C++
GNU C++
Inter C++
Sun C++
clang
2、一般编译过程:源文件→预处理→编译→汇编→链接→可执行文件
下面以GCC示例:
预处理(Pre-Processing):根据预处理命令(#开头)修改源文件
# gcc -o hello.i -E hello.c or # cpp -o hello.i hello.c
编译(Compiling):语法检查,并将源文件翻译成汇编文件
# gcc -o hello.s -S hello.i or # cc1 -o hello.s hello.i
汇编(Assembling):将汇编文件转换为目标文件(二进制)
# gcc -o hello.o -c hello.s or # as -o hello.o hello.s
链接(Linking):编址和符号链接,生成可执行文件
# gcc -o hello hello.o or # ld -o hello hello.o
❼ 如何自己实现一个类C脚本语言编译器
这个你就要学编译原理了,当你了解了编译原理,自然也就能写一个类C脚本语言编辑器
只要你原理明白了可以用任何技术实现,我上学时,有用JAVA实现的 有用HTML5+JS实现的 有用C#实现的
总得来说你得学编译原理,把词法分析 语法分析 3元组转换这些搞清楚。
❽ java在线编译器实现
try{
Thread.sleep(1000);
}catch(InterruptedException e){
//扑捉发生在线程中的异常,当一个正在执行的线程被中断时就会出现这个异常,添加catch后当程序被双击停止时不会出现错误
e.printStackTrace();
}
lbClock.setText(getDate());
}
❾ 计算机语言的编译器是怎么开发的
编译器用语言都写编译器主要功能进行词、语、语义析间代码优化间代码根据间代码汇编语言汇编语言变机器码整编译器算用任意语言实现
❿ 如何实现 C 语言编译器
汇编编译器:把汇编语言源程序转换为机器语言的程序,汇编编译器也可以生成源代码列表文件,其中包括行号,内存地址,源代码语句,程序中使用的符号及变量,交叉引用列表.
在Windows/Dos 下可用的汇编编译器有Microsoft宏汇编编译器MASM,Borland Turbo Assember(TASM)和The NetWide Assembler(NASM),其中NASM是跨平台的编译器可用于Windows/Dos/Linux下.他们的语法相近,都是Intel语法风格. 在Linux下可用的汇编编译器有NASM,gas.NASM和gas的语法风格相去甚远,NASM使用的是Intel 语法风格的汇编语法,而gas使用的是AT&T的汇编语法风格.