如何设计脚本语言 实现自己的脚本语言(一)

11/28 03:09:14 来源网站:268辅助卡盟网

Lex实现完之后,该如何实现语法解析呢?JSON的语法规则很简单,要么是个字典,要么是个数组。可是这字典里嵌套字典,字典里嵌套数组,数组里嵌套字典,数组里嵌套数组的,我该怎么做呢?突然灵光一现,递归啊(于是乎你明白我编程水平有多菜了吧)。

然后终于实现了一个简单的JSON解析器 jsonbee(不能支持完整语法),当时心情那个兴奋激动啊。

一激动,信心就爆棚了。于是乎想,之前不是粗略翻过《自制编程语言》么,不如就来用Go实现一番吧。首先练手的便是实现一个简单的计算器,照着他的C代码,实现了一份Go语言的 gocalc

后来,作者就都全部用Lex和Yacc工具来实现语法解析了,本来也觉得挺不情愿的,但是还是耐着头皮去模仿。万万没想到,这些个Lex和Yacc工具并不支持Go语言,看来是上天不让我学习呀。然后一个没想到,Go语言居然自带了Yacc工具,再一想想,自己实现Lex的代码,也是可以的嘛,于是乎,说干就干。

首先就是先用yacc把之前的那个计算器给重写了,写完yacc之后,我才从偏执中醒悟,原来yacc极好的体现了归约的思想,语法表现很清晰,对于编程语言的实现有莫大的促进理解之功效, 重写代码 yaccalc.

《自制编程语言》的第一个脚本语言,是用C语言实现的,我很不熟悉C语言,不过还是要先大致了解下代码结构。然后就开始用Go语言撸Lex部分的代码,确实是花了不少时间呐。Go的yacc工具文档很少如何设计脚本语言,甚少人使用,Lex该返回什么,返回什么值表示结束,怎么表示错误,如何把结果和yacc连接起来,真的是耗费了很多的时间。

Lex搞好之后,yacc部分花了更多的时间,yacc与lex结果的结合,yacc与解释器代码的结合,Go语言的yacc工具该如何使用,真的花费了很多很多时间。

后面解析器部分的代码,倒主要是仿抄C语言部分的代码,如何和yacc的结果结合起来,确实是一个很大的难点。

搞了将近三个月,终于是把结果给搞出来了,growbar, 虽然还不完整,不过至少把所有的测试代码跑过了。

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    暂无相关资讯
如何设计脚本语言 实现自己的脚本语言(一)