词法与语法
式之成,未必类与值之合法;后篇验之。混合位置之符有消歧,不可任解析器自定高下。
词一:扫描
依 UTF-8 字符读,外层明弃 U+0020、U+0009、U+000A;不擅弃 BOM、U+000D 或全角空白。换行不终句。名、串、注释中之标点不作外符。
设外层、名、串、转义、注释五态。外层先识 「: 为注释,次 「 为名,『 为串,余非空白留具体字符。名读至首 」,不反斜转义,不正规化;空名虽可扫描,不谓可作绑定或式。串至未转义 』,可含真换行;诸定界未闭则拒。
串内 「:…:」 为转义,非注释;仅容下表:
| 原文 | 所得 |
|---|---|
「:换行:」 |
U+000A |
「:制表:」 |
U+0009 |
「:』:」 |
』 |
「:「::」 |
「: |
反斜 \n 不特释,未知转义拒之。注释遇 「: 增深,遇 :」 减深,外层闭乃出。注释无运行作用而存文字与方向;本行已有元素则后置,否则前置,换行清其状态。
词二:由名辨数与内建
绑定既成,惟自由名依次辨之,不再改已绑定索引。先阳、阴、元;次完整内建类型名 《《内建类型:字符串》》 等,七类为字符串、整数、小数、动态分类值、有、爻、元类型;次完整爻阳阴与有元之名,及类型篇所列内建术。
余非空名,诸符皆在 0123456789.零一二三四五六七八九点,乃尝解析数。无点则十进逐位积;一分隔则分整小部;多分隔不作数。未成者仍为自由名。一二三 为一百二十三;十、负一、-1、1e3 不由此法识。空分隔部依实际分隔与用例判,不谓扫描成功即数有效。数非任意精度;小数字面兼存阿拉伯整小部及宿主近似,LLVM 取前者,不取六位打印之文。
语一:句形
下列为元语法,花括重复、方括可选;并非源码。名、串各有其定界。
文件 = { 声明 "。" | "。" } [ 声明 ] ;
声明 = 导入 | 名 ("乃" | "者" | "即" | "立") 式 "也" | 式 ;
导入 = ("寻" | "观" | "诵" | "寻观" | "寻诵" | "观诵" | "寻观诵") 路径 "之书" ;
路径 = 名 { "之" 名 } ;
式 = 名 | 串 | "(" 式 ")"
| "会" 名 "而" 式 | "遇" 式 "者" 名 "而" 式 | "受" 名 "而" 式
| "化" 式 "而" 式 | ("化" | "承") 式 "者" 名 "而" 式 | "承" 名 "而" 式
| "虑" 名 "者" 式 "而" 式 | "递归虑" 名 "其" 式 "者" 式 "而" 式
| "若" 式 "则" 式 "否则" 式 | "鉴" 式 "而" 分支 { "或" 分支 }
| 式 ("于" | "授以" | "之" | "中" | "与" | "合" | "也" | ";" | "附") 式
| 序列首 "【" [ 式 { "," 式 } [ "," ] ] "】"
| "《《C调用》》名" 式 "传" 式 | "循" 名 "以" 式 ;
分支 = "有" 式 "则" 式 ;
序列首 = 名 | "《《C调用》》名" 式 ;
切句惟圆括深度零而遇具体 。;空句弃,末无句号之非空句亦析。名串内句号已在令牌中。普通括号不容内联结构。鉴无自有末也;也常归外声明。或有是或与有相邻,非布尔或;合非联合类。
语二:成树之术
操作符由固定文字、式槽 〇、绑定槽 □ 成。保存各组件候选,不以最长关键词尽弃短者。绑定槽惟一名并接固定组件,式槽参递归解析。
可用共享子树之图表解析或多状态移入规约:逐读、扩候选、完模式而规约;两规约相争,查关系表。左规约先完左式,右规约使右式占槽;未定则留可行状态。形状约束亦须验,如投影之名、序列之首。
终须唯一合法树;无则拒,多不等价亦拒,不凭容器首项。括号强内部先成,自身不入类型树。后备先取“右为 〇也〇 且左异,则左规约”;次“左不始〇、右始〇,则右规约”;余不加臆约。
f 于 a 于 b 脊为 a、b;f 于 a 附 b 为 f 于 (a 附 b);A 合 F 于 X 为 A 合 (F 于 X)。空白先弃,不设英语词界。
语三:构树与糖
会为无标注显式抽象,遇为有标注显式抽象,受为隐式类参抽象。绑定仅及其体,不及参数类型。化 A 而 B 若 B 已为连续箭头,则前加 A;承引全称,相邻全称合数。旧化/承带名形式,定义域须语法上元类型或相应节点,不能以任意等义别名代之,皆降隐式全称。
于、授以分别追加显隐实参,已有脊不复二叉包裹。A 也 e 左类右物,运行只存 e。虑之名仅及后式;递归虑之名分别及定义与后式,不及其类型。
与、合展平右元组,左元组仍嵌套。中之索引须语法期整数常量,非动态索引;之之右须名称,静态投影。附先按字符串检查并绑定左右,再调用 豫言_字符串拼接,临名须避捕获。
列括号依右折成缀与罄,空者罄;模式同化。典留配置树,普通运行检查不以为字典值。扩展头留相应阶段解释,不任意执行。C 调用括号与传同:零项元、一项本项、多项元组。
旧 循 x 以 e 今惟还 e,不设递归绑定。不可复作不动点。括号不阻右元组或箭头展平:a 与(b 与 c) 三项,(a 与 b)与 c 首项嵌套。亦不可凭括号增部分应用之界。
语四:声明预处理
乃与紧随同名者/即合一项;孤签名、异名、中夹声明皆拒。合后对定义同名抽象;声明类型箭头/全称,或定义为函数,则设递归,否则去顶层绑定。无签名者无此自动递归。
普通命名项初为公开,无私有关键字。裸顶层式给内部匿名名而占定义位。寻观诵先展内部操作,名称解析再消费或展开它们;不得把源码行序直接当 ABI 定序。
语五:解析试例
「整数」也「一」 是标注;「整数」中「一」 虽成语法,验类当败。中后非数名,语法拒;未知首 「甲」【「一」】 不作调用。裸一或 1 非数字式,须在「」中。定界未闭,于其态报错,不吞下一文件。