|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
为了前面的treegrammar更简便,本篇对上一篇的树重写划定规矩和一些语法细节做了些调剂。而且,将天生的lexer和parser的源码方针换到了CSharp2,以便前面能利用一些.NET的库。
要利用CSharp2的方针,必要从官网下载响应的运转时库。以后的最新版是3.1.1,能够从这里猎取。CSharp/CSharp2方针的具体情形,能够查阅官网上的文档。以上一篇的语法为基本,要换到CSharp2方针只需把几个嵌进举措里的System.out.println换成Console.WriteLine,把toStringTree换成ToStringTree,把clear换成Clear就能够了。编译的时分最少必要援用Antlr3.Runtime.dll。
那末撤除改换天生方针带来的影响,此次做了些如何的修正呢?
起首,语法做了些渺小的调剂。比方说,program划定规矩从底本同意没有语句到如今请求最少有一条语句;blockStatement为空block写了条专门的分支;expressionStatement也增加了一个EXPR_STMT的假造token为根节点,等等。
变更最年夜的仍是variableDeclaration及相干划定规矩。上一篇里这条划定规矩的重写划定规矩其实不辨别有初始化与无初始化、复杂范例与数组范例的区分;本篇里则将这两个区分都明白的写在了重写划定规矩里,以分歧的虚构token来作为天生的树的根节点。如许,到写前面的treegrammar的时分,必要的lookahead数就能够减少。
ANTLR所天生的AST,以深度优先的体例遍历,能够看作一个一维的流:每层父子干系都能够暗示为:
root->"down"->element1->element2->...->elementN->"up"->...
个中"down"和"up"是ANTLR拔出的假造token,用于指定树的条理。
如许,前面利用treegrammar来遍历AST时,实践上遍历的就是如许一个一维的流(CommonTreeNodeStream)。以是我们也能够把treegrammar看作是隐含了"down"和"up"假造token的普通parsergrammar。那末,treegrammar中必要的lookahead个数的剖析,也就跟parsergrammar的一样。
看看上面的例子。关于上一篇variableDeclaration的重写划定规矩中呈现的变量声明的范例,能够用如许的treegrammar来婚配:
Java代码- type
- :^(SIMPLE_TYPEINT)
- |^(SIMPLE_TYPEREAL)
- |^(ARRAY_TYPEINTInteger+)
- |^(ARRAY_TYPEREALInteger+)
- ;
复制代码 树语法的^(...)就隐含了"down"和"up"这两个假造token。实践上这条划定规矩婚配的是:
<p>
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|