JAVA语言规范学习笔记(2)
来源:互联网 发布:南昌淘宝大学 编辑:程序博客网 时间:2024/05/01 03:03
JAVA语言规范的第二章开始讲的竟然是JAVA的语言语法,看这一段真的是一个非常繁琐的事情,何况还是E文。不过,咬紧牙关,我们还是来细细解析吧!
一个上下文无关的语法由许多productions组成,这个单词我也不知道该如何理解,就姑且用原文代替吧。而每个productions = nonterminal(左边) + a sequence nonterminal + terminal symbols,这句话怎么理解呢?意思是每个productions可分解为一个nonterminal的符号,放在其左边,右边则是由一系列的nonterminal和terminal symbols组成,这可以看作是一个语法分解的规则,因为后面许多的语法都是以这种形式结构来书写的。而每个terminal symbols就是语言里抽出的特殊字符。每个语言所提出的语法规则可以用来分解上面所提出的公式,productions = nonterminal(左边) + a sequence nonterminal + terminal symbols,每个nonterminal最终都要分解成许许多多terminal symbols。
JAVA中的lexcial grammar都是用unicode character set的字符来作为它的terminal symbols的字符集。从它的每一个nonterminal开始,重复的运用lexcial grammar中的规则,用terminal symbols来代替右边的nonterminal,形成一段完整的程序。lexcial grammar就是描述如何这样的一系列unicode character 是如何翻译为一系列的input elements的。那么我们得到的这些input elements后,去掉空格、注释,就得到了依照JAVA编程语言的Syntactic Grammar中所对应的terminal symbols,我们把它称作tokens,这些tokens就是我们以后会学到的标识符、关键字、分隔符和运算符。喘口气,说得真吃力!Syntactic Grammar就比较好理解,它就是察看这些编译单元中,如何来使用前面所得到的tokens组成一些正确的程序。
上面的叙述很繁琐,难以将清楚,总结为两句话
1、lexcial grammar,分解程序,得到一系列tokens。
2、Syntactic Grammar,检查程序,这些tokens是否组成了正确的程序。
JAVA语言规范的学习过程是很枯燥无味的,上面是我看了之后所得到的理解,并不一定都是完全正确的,错误的地方还请指正,一起讨论。
看完了上面的语法结构,我们来看到底在语言规范中是如何利用这些语法来分析程序的。
IfThenStatement:
if (Expression) Statement
这是一个简单的if语句的分解,IfThenStatement这个nonterminal是由关键字if,在这里用正体表示,后面是一个“(”左括符,紧接着是一个“Expression”表达式,由于表达式还可以分解,所以还是用斜体表示,再一个“)”右括符,还有一个Statement,同样它也可以再分解,还是用斜体表示。这就是一个简单的用一个lexcial grammar来分析语法的过程。
再看一个
ArgumentList:
Argument
ArgumentList, Arugment
这个语法的意思是,一个参数列表可以是单个的参数,第一行表示出来的;或者是多个参数。这是一个递归的方法来表示的。
还有一种语法的表示方法,就是后缀“opt”的使用。看一个例子。
BreakStatement
break Identifieropt;
opt的意思,顾名思义,就是“optional”,意思是可选的。那么上面BreakStatement就可以变成以下形式。
BreakStatement
break;
break Identifer;
语法的另一种表示形式
ZeroToThree:one of
0,1,2,3
这个我想大家可能都知道意思了,它可以分解成。
ZeroToThree:
0
1
2
3
最后一个
InputCharacter:
UnicodeInputCharacter but not CR or LF
Identifier:
IdentifierName but not a Keyword or BooleanLiteral or NullLiteral
“but not”的使用,表示除了。。。的意思。
关于JAVA语言规范中使用的语法表示就写到这里了,希望能给学习JAVA的同学提供一点参考作用。
- JAVA语言规范学习笔记(2)
- JAVA语言规范学习笔记(1)
- JAVA语言规范学习笔记(3)
- JAVA语言规范学习笔记(4)
- Golang学习笔记:语言规范之类型(续)
- 《Java编程规范学习笔记》
- 【Java】Servlet3规范学习笔记
- Java语言编码规范(2)
- Java语言编码规范(2)
- 学习笔记之C语言规范篇
- Golang学习笔记:语言规范二
- c语言命名规范_学习笔记
- PCI规范学习笔记(2)
- Java学习笔记(2)Java语言进阶
- java学习笔记(一)--编程规范和技巧总结
- Java Web学习笔记(三)MVC 包命名规范
- Java语言学习笔记
- java语言学习笔记
- 使用Handler来增强Web服务的功能(生成日志、用户认证、用户授权、信息加密/解密)
- 常见问题:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- 开源的CMS
- sprintf你知道多少
- 用netbeans快速开发java桌面程序(三) 组件位置的微调
- JAVA语言规范学习笔记(2)
- 跟我学JAVA -- JAVA与GUI
- Java: JNI完全手册
- 2006-4-26 正式全面进军linux系统!
- win2003下APACHE2.050+PHP5+MYSQL4.0.20+PHPMYADMIN2.57 的简易安装配置
- J2ME控制响应按键的算法以及冲突检测的方法和动画的处理
- JSP彩色验证码
- PHP五虎将
- 将asp.net1.1的应用程序升级到asp.net2.0的一点心得