• 静思
  • 吴言片语
    • 吴言
    • 片语
    • 杂七杂八
  • 死于青春
    • 一路走好
  • 乌合麒麟
  • 纪念
    • 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:13 by Jay | 被踩了 2,795 脚

TOC

Toggle
  • 二、Mini Java的文法
    • BNF

二、Mini Java的文法

BNF

Goal::=MainClass ( TypeDeclaration )* <EOF>
MainClass::=“class” Identifier “{” “public” “static” “void” “main” “(” “String” “[” “]” Identifier “)” “{” PrintStatement “}” “}”
TypeDeclaration::=ClassDeclaration
|ClassExtendsDeclaration
ClassDeclaration::=“class” Identifier “{” ( VarDeclaration )* ( MethodDeclaration )* “}”
ClassExtendsDeclaration::=“class” Identifier “extends” Identifier “{” ( VarDeclaration )* ( MethodDeclaration )* “}”
VarDeclaration::=Type Identifier “;”
MethodDeclaration::=“public” Type Identifier “(” ( FormalParameterList )? “)” “{” ( VarDeclaration )* ( Statement )* “return” Expression “;” “}”
FormalParameterList::=FormalParameter ( FormalParameterRest )*
FormalParameter::=Type Identifier
FormalParameterRest::=“,” FormalParameter
Type::=ArrayType
|BooleanType
|IntegerType
|Identifier
ArrayType::=“int” “[” “]”
BooleanType::=“boolean”
IntegerType::=“int”
Statement::=Block
|AssignmentStatement
|ArrayAssignmentStatement
|IfStatement
|WhileStatement
|PrintStatement
Block::=“{” ( Statement )* “}”
AssignmentStatement::=Identifier “=” Expression “;”
ArrayAssignmentStatement::=Identifier “[” Expression “]” “=” Expression “;”
IfStatement::=“if” “(” Expression “)” Statement “else” Statement
WhileStatement::=“while” “(” Expression “)” Statement
PrintStatement::=“System.out.println” “(” Expression “)” “;”
Expression::=AndExpression
|CompareExpression
|PlusExpression
|MinusExpression
|TimesExpression
|ArrayLookup
|ArrayLength
|MessageSend
|PrimaryExpression
AndExpression::=PrimaryExpression “&&” PrimaryExpression
CompareExpression::=PrimaryExpression “<” PrimaryExpression
PlusExpression::=PrimaryExpression “+” PrimaryExpression
MinusExpression::=PrimaryExpression “-” PrimaryExpression
TimesExpression::=PrimaryExpression “*” PrimaryExpression
ArrayLookup::=PrimaryExpression “[” PrimaryExpression “]”
ArrayLength::=PrimaryExpression “.” “length”
MessageSend::=PrimaryExpression “.” Identifier “(” ( ExpressionList )? “)”
ExpressionList::=Expression ( ExpressionRest )*
ExpressionRest::=“,” Expression
PrimaryExpression::=IntegerLiteral
|TrueLiteral
|FalseLiteral
|Identifier
|ThisExpression
|ArrayAllocationExpression
|AllocationExpression
|NotExpression
|BracketExpression
IntegerLiteral::=<INTEGER_LITERAL>
TrueLiteral::=“true”
FalseLiteral::=“false”
Identifier::=<IDENTIFIER>
ThisExpression::=“this”
ArrayAllocationExpression::=“new” “int” “[” Expression “]”
AllocationExpression::=“new” Identifier “(” “)”
NotExpression::=“!” Expression
BracketExpression::=“(” Expression “)”


-- 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, 作业
← Mini Java编译器(一)
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,207 脚
  • 生活,就是一个期待跟着一个期待 - 被踩了 21,357 脚
  • 星巴克饮品缩写大全(Starbucks Drink ID Codes)[zz] - 被踩了 18,403 脚
  • 从一个全角冒号说一下我为什么不感冒iOS - 被踩了 14,304 脚
  • 有关Character.isLetter()和Character.isLetterOrDigit() - 被踩了 13,589 脚

刚拍的砖

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

随便看看

  • 经典的回帖 [zz]9 年 ago
  • 乔布斯追悼漫画 [zz]5 年 ago
  • 太奢侈了4 年 ago
  • 游戏推荐:Human Resource Machine3 年 ago
  • 新年快乐!NOBODY兔斯基(清晰版)16 年 ago

文以类聚

光阴似箭

其他操作

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

Copyright © 2025 程序员的信仰.

Jay's Omega WordPress Theme by Jay

 

正在加载评论...
 

    %d