[怀旧]拿'AWK'第六章的代码改了一个BASIC语言解释器出来汗
发表于 : 2012-06-21 14:39
拿AWK写的,最近感觉AWK真的是好厉害的工具。
放在github/gist上的代码地址:
+ 代码 http://gist.github.com/2959816
+ 测试 http://gist.github.com/2959877
总之就这么慢慢地陆陆续续地会再再做点修改吧。
如果当前的版本是坏掉的,有可能前一个版本是好的。
当前只是直接根据代码的字符串来运行就是了,这样不大好就是了。
功能是按照GWBASIC做的,实现得很不完整就是了。
看看上面的那个测试代码的链接就能看到能做什么了。
用法什么大致是这样的:
+ 一行一个语句,行内语句可以用冒号分割;
+ 每行可以有行号,或者当行用“label:”的设置标签;
+ goto语句用来跳转到行号或标签;
+ gosub跳转后遇到return会返回;
+ if跳转语句 if 1<2 and 2<2+1 goto 10;
+ 单行if-then语句可以直接接代码;
+ while/wend为循环语句,可以嵌套使用;
+ rem语句,单行注释;
+ print语句显示,末尾分号“;”表示不换行;
+ input语句,从键盘输入行,input ">",x或input x;
+ cls清除屏幕;
+ let x=1 用来给变量赋值,let可以省略;
+ end语句,结束程序;
+ 可以使用数组“x[1]=2”;
+ 内置函数提供 mod、len……;
+ 运算符有 &(字符串连接) +(数字求和) - * / = and or ;
+
补充说明:
+ 以#和@开头的行被作为保留用途了,比如#开头的行当注释处理了,
+ 尽量保障mawk能运行,不行的话请用gawk
+
潜在的问题:
+ 数字1/0有时会被判为逻辑假/真(逻辑表达式貌似没有问题),
+ 测试很不充分,仅保障当前自带的示例代码能运行。
+
原书上的代码是 http://cm.bell-labs.com/cm/cs/who/bwk/awkcode.txt
这里是拿里面文件名为 awk.parser 的这个代码改的,改动不是很大。
就这样吧


放在github/gist上的代码地址:
+ 代码 http://gist.github.com/2959816
+ 测试 http://gist.github.com/2959877
总之就这么慢慢地陆陆续续地会再再做点修改吧。
如果当前的版本是坏掉的,有可能前一个版本是好的。
当前只是直接根据代码的字符串来运行就是了,这样不大好就是了。

功能是按照GWBASIC做的,实现得很不完整就是了。
看看上面的那个测试代码的链接就能看到能做什么了。

用法什么大致是这样的:
+ 一行一个语句,行内语句可以用冒号分割;
+ 每行可以有行号,或者当行用“label:”的设置标签;
+ goto语句用来跳转到行号或标签;
+ gosub跳转后遇到return会返回;
+ if跳转语句 if 1<2 and 2<2+1 goto 10;
+ 单行if-then语句可以直接接代码;
+ while/wend为循环语句,可以嵌套使用;
+ rem语句,单行注释;
+ print语句显示,末尾分号“;”表示不换行;
+ input语句,从键盘输入行,input ">",x或input x;
+ cls清除屏幕;
+ let x=1 用来给变量赋值,let可以省略;
+ end语句,结束程序;
+ 可以使用数组“x[1]=2”;
+ 内置函数提供 mod、len……;
+ 运算符有 &(字符串连接) +(数字求和) - * / = and or ;
+
补充说明:
+ 以#和@开头的行被作为保留用途了,比如#开头的行当注释处理了,
+ 尽量保障mawk能运行,不行的话请用gawk
+
潜在的问题:
+ 数字1/0有时会被判为逻辑假/真(逻辑表达式貌似没有问题),
+ 测试很不充分,仅保障当前自带的示例代码能运行。
+

原书上的代码是 http://cm.bell-labs.com/cm/cs/who/bwk/awkcode.txt
这里是拿里面文件名为 awk.parser 的这个代码改的,改动不是很大。
就这样吧
