正则表达式的理论基础可以参考装配脑袋的 这个 自己动手开发编译器(二)正则语言和正则表达式 这个 自己动手开发编译器(三)有穷自动机 还有这个 自己动手开发编译器(四)利用DFA转换表建立扫描器 如果学过编译原理的课程就更好了. 词法分析用到了我写的一个工具lexeroid. 下面说一些我写lexeroid时候遇到的问题. Unicode 在 装配脑袋 的 自己动手开发编译器(四)利用DFA转换表建立扫描器 中,提到了等价类处理Unicode的方法. 我做了一些改进. 首先我把DFA Edge的…
正式开始介绍前先扯点没用的. 从小玩basic长大的小朋友大多有一个梦想,就是自己实现一个basic解释器. 不过这里我实现的不是basic,而是一个语法和功能类似javascript的东西. 暂且称之为ngscript 做这个的初衷是想试试不借助任何cc工具,只用java和一些语言的基础设施来实现一个脚本解释器. 不使用cc工具有以下原因 语法蛋疼 调试麻烦 不知其所以然 很多书上把常用的parsing方法介绍一通,然后就去折腾sablecc,yacc去了(貌似还有一本书是专门讲yacc和le…
这是第四篇了,之所以隔了这么久才写,一方面是因为最近开始实习了,另一方面是因为设计语法真是要考虑很多东西. 于是我去读了这本书,里面实现了两种语言,一种跟js差不多语法,用ast解释执行:另一种语法类似java,编译成字节码执行. 于是ngscript就愉快的决定使用类似js语法.编译成字节码了. 这之间还看了一本<flex与bison>,主要看了看LALR(1)中冲突的处理和写文法要注意的事情. 现在的BNF已经写成这个样子了.可能还会不断的改.常用的控制结构和try…catch都有. //…
最近的进度 ngscript测试代码 function c1(a, b, c, d) { this.a = 1; this.b = new array(); this.b[0] = 1; this.b[1] = 2; } c = new c1(); print(c.a); a = (function(a, b, c) { return a + b * c; })(1, 2, 3); print(a); if (1) { print("if_test"); } if (0) { prin…
ngscript的语法分析使用的是我自己的语法分析工具parseroid.与常用cc工具(yacc.bison.javacc.antlr.etc…)不同的是,parseroid生成的不是语法分析器的源程序,而是一个parser对象,直接可以用来执行parsing.也就是说,可以由BNF在执行阶段动态生成parser. 生成parser的action table运算量还是有点大,所以在新版的parseroid里面table改成了serializable的,可以缓存下来免去生成table的过程. 实…
自从将Xmas的GC换成现在的非迁移式的全局收集器后,最近几个月一直耗在Xmas上面:最明显的改变就是:更彻底地支持了面向对象.更强大的编译器. 所以,本文就来说说,真正的Xmas. 一.目标 一门语言有什么目标吗?比如C#什么的:可惜的是我并不关心.作为一门脚本语言,其目的无非只有一个:简化编程.方式,也是直接明了:在更高的抽象上构建代码.那么什么是"更高的抽象"?个人认为,大抵是亮点:1.更方便的操作语义 2.更多的限制. 第一点,是指Xmas可以几乎毫无代价地大量使用宿主语言的现…
好吧!我承认我想标题党了.大家对解释器的吸引,绝对没有自己动手写一个脚本语言更有吸引力.不过如果看到标题过来的,可能也是 我承认,之前收藏的减肥视频,我都是这样对待他们的. 不过我还是相信很多程序猿or程序媛不仅仅希望可以做出一个牛逼的产品,更想做出来一个牛逼闪闪的编程语言.而这里就是朝着开发一个脚本语言的方向去努力 恩!我就是xxoo语言之父. 前几篇文章已经实现一个简易的加减法计算器,想必看了文章之后可以很快的写出来一个乘除法计算器.那么如果加减乘除混合运算呢? 这节将实现类似6-1*2+4…
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      1.变量      BOOL 布尔型 值为TRUE(1)或FALSE(0)      CHAR 字符型 一字节长的(8bit)的字符      HWND 窗口句柄 用来存放窗口句柄      INT 整型 两字节长的整数      LIST 列表型 指向InstallShield列表,用ListCr…
javascript,Javascript是一种浏览器端的脚本语言,用来在网页客户端处理与用户的交互,以及实现页面特效.比如提交表单前先验证数据合法性,减少服务器错误和压力.根据客户操作,给出一些提升,让用户体验更好等.也可以实现一些页面动画. 有两种,一种是嵌在网页里的.一种是引用的. 先看看嵌在网页中的.比较易懂. 一.嵌网页的脚本格式脚本可以写在任何位置,但一般来说都写在网页最底部,因为网页运行需要一个顺序.如果写在上面需要再写一段代码. <script type="text/jav…
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的. AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC.ORM.SOA.分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体.数据模型设计生…