|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开编译1、义务概述
本项高文业将计划并完成一个MiniJava言语的编译器
MiniJava概述
MiniJava是Java言语的子集。作为一种很好的编译课程教授教养言语,它与Java比拟做了以下精简:
(1)不同意重载(overloading)
(2)一个文件中能够声名多少个类,但必需有且只要一个的主类,辅类能够有多个,类不克不及声名为public;主类中只能有一个主办法,该办法的署名必需为“publicstaticvoidmain(String[])”,个中String[]参数不做处置。主办法中只能有一条输入语句:System.out.println(int),该语句只能输入整型变量值
(3)只要类,没有接口,有承继干系(单承继)
(4)类中只能声名变量和办法
(5)只要四种变量范例:整型(integer)、布尔型(boolean)、数组(array)、对象;只要一类数组:整型数组(int[]);变量必需声名为(auto)型
(6)办法必需为public,必需有前往值,前往值范例受(5)限定;能够有参数,能够没有,参数数目没无限制,范例受(5)限定
(7)一共有6中语句(statement):代码块(block)、复杂赋值语句(assignmentstatement)、数组赋值语句(arrayassignmentstatement)、打印语句(printstatement)、if语句、while语句
(8)一共有9种表达式(expression):与(and)、对照(compare)、加(plus)、减(minus)、乘(times)、数组定位(arraylookup)、数组长度(arraylength)、动静传送(messagesending,即参数传送)、主表达式(primaryexpression);与表达式为“短路与”(&&);对照只能作小于对照
(9)主表达式一共有9种:整数(Integer)、“真”(true)、“假”(false)、对象、this、初始化(allocation)、数组初始化(arrayallocation)、非(not)、括号(bracket)
(10)初始化时只能利用空参数,以是没有“机关器(constructor)”观点
(11)对标识符(IDENTIFIER)没有作明白界说,在这里划定只能是字母、数字的汇合,但必需以字母开首,辨别巨细写
(12)对整数(INTEGER_LITERAL)没有作明白界说,在这里划定为无标记整数,32位(0~4294967295)
(13)不同意正文
(14)类变量声明时不克不及初始化,初始化必需在办法中完成
(15)不克不及界说外部类
保存字、闭幕符
保存字
辨认编码
影象符
值
<EOF>
0
EOF
-
boolean
1
BOOLEAN
-
class
2
CLASS
-
else
3
ELSE
-
extends
4
EXTENDS
-
fasle
5
FALSE
-
if
6
IF
-
int
7
INT
-
length
8
LENGTH
-
main
9
MAIN
-
new
10
NEW
-
public
11
PUBLIC
-
return
12
RETURN
-
static
13
STATIC
-
this
14
THIS
-
true
15
TRUE
-
void
16
VOID
-
while
17
WHILE
-
String
18
STRING
-
System.out.println
19
PRINTLN
-
=
20
EQUAL
-
!
21
NOT
-
&&
22
AND
-
+
23
PLUS
-
-
24
MINUS
-
*
25
TIMES
-
<
26
COMPARE
-
.
27
DOT
-
;
28
SEMICOLON
-
,
29
COMMA
-
[
30
LEFT_SQUARE
-
]
31
RIGHT_SQUARE
-
(
32
LEFT_BRACKET
-
)
33
RIGHT_BRACKET
-
{
34
LEFT_BLOCK
-
}
35
RIGHT_BLOCK
-
标识符
36
ID_STRING
外部字符串
无标记整数
37
ID_INTEGER
整数值
本编译器概述
(1)语法剖析程序用带回溯的递回子程序法
(2)对源文件举行两遍处置:第一遍词法剖析,第二遍语法剖析
(3)利用编译时静态分派存储空间
(4)整型数据范例32位,占4个字节;布尔型数据范例8位,占1个字节;内存(由列表假造)寻址10位,1KB
(5)为了完成便利,父类必需在子类之前界说
(6)因为工夫缘故原由,编译器做了以下简化:
(i)表达式只能处置加法、减法、乘法、小于对照、逻辑与,且只能对整数或布尔值间接举行盘算,而不克不及盘算变量的值
(ii)不克不及处置办法挪用
(iii)不克不及处置数组
(iv)不克不及举行对象初始化
(v)不克不及处置布局化语句
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。 |
|