继上文,实现了以下例程:
和为10
输出和
开源在此。Python代码约200行,测试约80行。
如逻辑语言原型, 为支持无空格语法设计,用按语法分词接口。
项目结构与上文的子集项目类似,在语法分析时生成Python语法树后运行输出。
期间碰到的一个情况是,现在输出0生成的Python语法树局部如下:
Module(
body=[Expr(
value=Call(
func=Name(
id='print'
ctx=Load()
lineno=1
col_offset=1
)
args=[Constant(
value=0
kind=None
lineno=1
col_offset=3
)]
...
调用函数直接改写成了print,而常数0的列号是按照“输出0”的第3列。如果以后需支持自定义函数再看。
其实不止此处。以后支持多步骤时,算法代码和生成的Python代码的行列数很可能有出入,为调试所需准确定位也许需要设计另一套语法树。
根据之前设想,尝试其他自然语言语法。下面是用抚子语言写的累加例程:
和=0
数=1
数が3以下の間
和=和+数
数=数+1
ここまで。
和を表示。
以上为相对接近木兰语言的语法,也是第一期目标。
抚子还有其他语法如下:
和=0
数を1から3まで繰り返す
和=和+数
ここまで。
和を表示。
或者数を1増やす也可将变量加一。
和に数を足して
和に数を足すこと