欢迎光临
我们一直在努力

Mini Java编译器(一)-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

一、任务概述

本项大作业将设计并实现一个mini java语言的编译器

mini java概述

mini java是java语言的子集。作为一种很好的编译课程教学语言,它与java相比做了如下精简:

(1)不允许重载(overloading)

(2)一个文件中可以申明若干个类,但必须有且只有一个的主类,辅类可以有多个,类不能申明为public;主类中只能有一个主方法,该方法的签名必须为“public static void main(string[])”,其中string[]参数不做处理。主方法中只能有一条输出语句:system.out.println( int ),该语句只能输出整型变量值

(3)只有类,没有接口,有继承关系(单继承)

(4)类中只能申明变量和方法

(5)只有四种变量类型:整型(integer)、布尔型(boolean)、数组(array)、对象;只有一类数组:整型数组(int[]);变量必须申明为(auto)型

(6)方法必须为public,必须有返回值,返回值类型受(5)限制;可以有参数,可以没有,参数数量没有限制,类型受(5)限制

(7)一共有6中语句(statement):代码块(block)、简单赋值语句(assignment statement)、数组赋值语句(array assignment statement)、打印语句(print statement)、if语句、while语句

(8)一共有9种表达式(expression):与(and)、比较(compare)、加(plus)、减(minus)、乘(times)、数组定位(array lookup)、数组长度(array length)、消息传递(message sending,即参数传递)、主表达式(primary expression);与表达式为“短路与”(&&);比较只能作小于比较

(9)主表达式一共有9种:整数(integer)、“真”(true)、“假”(false)、对象、this、初始化(allocation)、数组初始化(array allocation)、非(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)不能处理结构化语句

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Mini Java编译器(一)-JSP教程,Java技巧及代码
分享到: 更多 (0)