https://zhuanlan.zhihu.com/p/2009268825904939545
继上文,已实现支持以下例程:
和=0
数=1
数が3以下の間
和=和+数
数=数+1
ここまで
和を表示
仓库在此。这次鸡蛋画的更快,两天八次提交、代码量与之前的木兰子集项目类似。且验证了 按语法分词 接口的初步可用性。
开发期间遇到几种问题,一是语法规则未覆盖测试用例,反馈信息两例如下:
rply.报错.按语法分词报错: [(0, '标识符'), (1, '='), (2, '整数'), (3, '换行'), (4, '标识符'), (5, '='), (6, '标识符')] rply.报错.按语法分词报错: [(0, '整数'), (1, '+'), (2, '整数'), (3, '输出')] 需要检视是哪些语法规则相关,因为测试例程较简明可以较快查错。
另一种问题是词法规则漏加,比较好办:
rply.报错.分词报错: ("请为第7行第1列的'和'添加分词匹配规则", SourcePosition(idx=0, lineno=7, colno=1)) 还有一种是在生成语法树节点填充行列号时出错:
File "..../日语版子集/分析器/语法树.py", line 56, in 取源码位置
if 'lineno' in 片段:
^^^^^^^^^^^^^^^^
TypeError: argument of type 'Compare' is not iterable
权宜之计先实现语言基本功能,之后会在算法语言项目关注代码段定位准确性、对语法错误的反馈信息等方面。
在语言设计方面,通过借鉴自然语言语法,一个优势是减少特殊符号如小括号、花括号的使用,但也对空格或换行等对代码语句的分隔有了更多依赖。
另注意到一个有趣之处,抚子语言好像特地将条件或变量名等置于语句开头,对比木兰原始的语法设计(空格仅为明晰语法,实际不需要加):
数が3以下 の間 <=> while 数<=3 {
和 を表示 <=> print(和)
这样的好处是在阅读代码时「肉」相对于「骨」更醒目。