JAVA语言规范学习笔记(2)

来源:互联网 发布:南昌淘宝大学 编辑:程序博客网 时间:2024/05/01 03:03

JAVA语言规范的第二章开始讲的竟然是JAVA的语言语法,看这一段真的是一个非常繁琐的事情,何况还是E文。不过,咬紧牙关,我们还是来细细解析吧!

一个上下文无关的语法由许多productions组成,这个单词我也不知道该如何理解,就姑且用原文代替吧。而每个productions = nonterminal(左边) + a sequence nonterminal + terminal symbols,这句话怎么理解呢?意思是每个productions可分解为一个nonterminal的符号,放在其左边,右边则是由一系列的nonterminalterminal 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语言规范学习笔记(3)
原创粉丝点击