• 静思
  • 吴言片语
    • 吴言
    • 片语
    • 杂七杂八
  • 死于青春
    • 一路走好
  • 乌合麒麟
  • 纪念
    • 5.12
    • 3.23
  • GitHub
    • A List of Post-mortems
    • The Art of Command Line
  • 关于
    • Privacy Policy

程序员的信仰

金鳞岂是池中物,一遇风云便化龙

HOME » 学校生活 » Mini Java编译器(一)

Mini Java编译器(一)

2005 年 3 月 16 日 @ 上午 11:12 by Jay | 被踩了 3,327 脚

TOC

Toggle
  • 一、任务概述
    • Mini Java概述
    • 保留字、终结符
    • 本编译器概述

一、任务概述

本项大作业将设计并实现一个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>0EOF–
boolean1BOOLEAN–
class2CLASS–
else3ELSE–
extends4EXTENDS–
fasle5FALSE–
if6IF–
int7INT–
length8LENGTH–
main9MAIN–
new10NEW–
public11PUBLIC–
return12RETURN–
static13STATIC–
this14THIS–
true15TRUE–
void16VOID–
while17WHILE–
String18STRING–
System.out.println19PRINTLN–
=20EQUAL–
!21NOT–
&&22AND–
+23PLUS–
–24MINUS–
*25TIMES–
<26COMPARE–
.27DOT–
;28SEMICOLON–
,29COMMA–
[30LEFT_SQUARE–
]31RIGHT_SQUARE–
(32LEFT_BRACKET–
)33RIGHT_BRACKET–
{34LEFT_BLOCK–
}35RIGHT_BLOCK–
标识符36ID_STRING内部字符串
无符号整数37ID_INTEGER整数值

 

本编译器概述

  1. 语法分析程序用带回溯的递归子程序法
  2. 对源文件进行两遍处理:第一遍词法分析,第二遍语法分析
  3. 使用编译时静态分配存储空间
  4. 整型数据类型32位,占4个字节;布尔型数据类型8位,占1个字节;内存(由列表虚拟)寻址10位,1KB
  5. 为了实现方便,父类必须在子类之前定义
  6. 由于时间原因,编译器做了如下简化:
    1. 表达式只能处理加法、减法、乘法、小于比较、逻辑与,且只能对整数或布尔值直接进行计算,而不能计算变量的值
    2. 不能处理方法调用
    3. 不能处理数组
    4. 不能进行对象初始化
    5. 不能处理结构化语句


-- EOF --

除非注明(如“转载”、“[zz]”等),本博文章皆为原创内容,转载时请注明: 「转载自程序员的信仰©」
本文链接地址:Mini Java编译器(一)

分享

  • 点击分享到 Facebook (在新窗口中打开) Facebook
  • 点击以分享到 X(在新窗口中打开) X
  • 更多
  • 点击分享到Reddit(在新窗口中打开) Reddit
  • 点击分享到Telegram(在新窗口中打开) Telegram
  • 点击以在 Mastodon 上共享(在新窗口中打开) Mastodon

赞过:

赞 正在加载……

相关

Today on history:

【2012】2012年政府工作报告 脱水版
【2009】如何让Netbeans以英文模式启动
【2006】程序员是如何捕猎大象的 [zz]
Posted in: 学校生活 Tagged: java, 作业
← Nice用户手册(三)
Mini Java编译器(二) →

android (9) apple (20) augmentum (9) Beijing (21) bt (8) career (28) coding (38) firefox (10) google (36) hibernate (11) ibm (11) iphone (10) java (93) linux (16) m$ (26) mac (58) macos (27) nazca (9) olympics (8) oo (8) playstation (10) rip (8) Shanghai (39) spring (9) tips (45) tommy emmanuel (8) ubuntu (12) usa (23) windows (9) 北航 (17) 博客 (29) 吐槽 (8) 周末 (9) 和谐社会 (26) 小资 (11) 愤青 (40) 方言 (10) 朋友 (77) 歌词 (8) 烟酒不分家 (18) 爱国 (19) 爱情 (8) 犯二 (15) 破解 (8) 足球 (11)

烫手山芋

  • 再谈苹果的输入法:这一次是靠OS X自带的输入法来翻身的~ - 被踩了 27,867 脚
  • 生活,就是一个期待跟着一个期待 - 被踩了 21,411 脚
  • 星巴克饮品缩写大全(Starbucks Drink ID Codes)[zz] - 被踩了 18,549 脚
  • 从一个全角冒号说一下我为什么不感冒iOS - 被踩了 14,494 脚
  • 有关Character.isLetter()和Character.isLetterOrDigit() - 被踩了 13,653 脚

刚拍的砖

  • leo 发表在《再谈苹果的输入法:这一次是靠OS X自带的输入法来翻身的~》
  • 花 发表在《再谈苹果的输入法:这一次是靠OS X自带的输入法来翻身的~》
  • 无名氏 发表在《从一个全角冒号说一下我为什么不感冒iOS》
  • Jay 发表在《Mac OS geek级问题》
  • Wei Wang 发表在《再谈苹果的输入法:这一次是靠OS X自带的输入法来翻身的~》

随便看看

  • 星巴克饮品缩写大全(Starbucks Drink ID Codes)[zz]9 年 ago
  • “我们只能自救”10 年 ago
  • GPT与MBR那些纠缠不清的故事第一弹——MBR与GPT都是什么呢?[zz]9 年 ago
  • 周末谁TM活在北京的,出来喝酒!18 年 ago
  • 感冒了20 年 ago

文以类聚

光阴似箭

其他操作

  • 登录
  • 条目 feed
  • 评论 feed
  • WordPress.org

Copyright © 2025 程序员的信仰.

Jay's Omega WordPress Theme by Jay

 

正在加载评论...
 

    %d