仓酷云

标题: 发布一篇一个复杂的言语的语法(三):做些小调剂,并将天生方针换到CSharp2 ... [打印本页]

作者: 山那边是海    时间: 2015-1-18 11:05
标题: 发布一篇一个复杂的言语的语法(三):做些小调剂,并将天生方针换到CSharp2 ...
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代码
  1. type
  2. :^(SIMPLE_TYPEINT)
  3. |^(SIMPLE_TYPEREAL)
  4. |^(ARRAY_TYPEINTInteger+)
  5. |^(ARRAY_TYPEREALInteger+)
  6. ;
复制代码
树语法的^(...)就隐含了"down"和"up"这两个假造token。实践上这条划定规矩婚配的是:
发布一篇一个复杂的言语的语法(三):做些小调剂,并将天生方针换到CSharp2 ...
登录/注册后可看大图

<p>
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流.
作者: 再现理想    时间: 2015-1-20 14:06
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 老尸    时间: 2015-1-21 23:32
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 若天明    时间: 2015-1-24 17:41
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 小妖女    时间: 2015-2-2 11:29
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 第二个灵魂    时间: 2015-2-7 19:04
Java 编程语言的风格十分接近C、C++语言。
作者: 金色的骷髅    时间: 2015-2-23 00:46
Java 编程语言的风格十分接近C、C++语言。
作者: 活着的死人    时间: 2015-3-7 04:34
是一种将安全性(Security)列为第一优先考虑的语言
作者: 再见西城    时间: 2015-3-14 10:25
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 仓酷云    时间: 2015-3-21 02:00
是一种语言,用以产生「小应用程序(Applet(s))




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2