Vczh Lazy Script
Vczh Lazy Script的开发历程
关于类型推导的设想
摘要: 这几天一直在忙学校的比赛,到了今天终于有空了。
Lazy Script的语法实在是很复杂,因此不得不在进行第一步的名字检查之后把原本的语言转换为内部使用的一种元语言。这种元语言设计的原则是尽量简单。譬如列表构造和do-end语句就需要被转换掉。进行了转换以后,就需要对元语言进行一个类型方程组的建立。这一步暂时还没有建模好,而且实际工作需不需要真的构造出一组方程组还不知道。目前还比较没有头绪的就是如何对模板函数的类型方程建模。
举个例子,譬如我们对上一篇文章中提到的代码进行类型方程组的构造:
阅读全文
posted @
2008-04-27 10:16 陈梓瀚(vczh) 阅读(2124) |
评论 (0) 编辑
Vczh Lazy Script 语法分析器完成
摘要: 花了两天的时间终于完成了Vczh Lazy Script的语法分析工作。语法分析是编译的第一步,旨在把输入的字符串(代码)分析称跟代码结构一致的语法树,以便后续工作。
藉着去年开发的Syngram工具包,这两天过得还算轻松,仅仅对语言做了一份配置,不过这份配置也花掉了1200多行代码。语法分析其余的部分是数据结构。目前的数据结构仅仅用于再现语言的结构,而没有附加任何的数据。接下来的工作是检查所有的identifier,看看有没有哪些identifier是使用错误的。一般来说都是在左值使用函数、类构造标签参数不全、转移运算符指向的函数并没有声明成函数等等比较基本的东西。但是后续的工作就相当地麻烦了。
作为一门lazy+pure的函数范式程序语言,我模仿了Haskell的大部分语法,加上自己的一点点修改(因为Haskell的语法实在是太诡异了),但是主要功能是没有变化的。等上面所说的identifier完成以后,我就要开始写Lazy的类型推导程序了。类型推导程序用于计算出代码中省略的类型声明,相当于把整份代码转换成类型方程然后求解
阅读全文
posted @
2008-04-22 04:03 陈梓瀚(vczh) 阅读(2539) |
评论 (4) 编辑
Vczh Lazy Script 上下文无关文法
摘要: ExpCmList -> Expression ["," ExpList]
ArrCmList -> [LeftValue "<-"] Expression ["," ArrList]
CaseList -> LeftValue ":" Expression ";" [CaseList]
DoList -> ([LeftValue "="]Expression | LeftValue "::" TypeDes ) ";" [DoList]
WhereList -> (FuncHead | FuncBody) ";" [WhereList]
Exp0 ->
Exp0 -> FuncName
Exp0 -> "(" [ExpCmList] ")"
Exp0 -> "[" [ExpCmList] "]"
Exp0 -> "[" Expression "|" ArrCmList "]"
Exp0 阅读全文
posted @
2008-04-20 20:50 陈梓瀚(vczh) 阅读(1856) |
评论 (3) 编辑