直至正文豫言技术之文

豫言 / 技术规范

此篇据 4cdeca1 之实现。所据及适用之界,见基线之篇。

词法与语法

式之成,未必类与值之合法;后篇验之。混合位置之符有消歧,不可任解析器自定高下。

词一:扫描

依 UTF-8 字符读,外层明弃 U+0020、U+3000、U+0009、U+000A。式可跨行。名、串、注释中之字存其旧。

文之首行以 #! 起者(脚本之解释器行,如 #!/usr/bin/env -S 豫构 运行),全行视为空白,后行之行号如故。

设外层、名、串、转义、注释五态。外层先识 「: 为注释,次 「 为名,『 为串,余非空白留具体字符。名读至首 」,不反斜转义,不正规化;空名虽可扫描,不谓可作绑定或式。串至未转义 』,可含真换行;诸定界未闭则拒。

串内 「:…:」 为转义,非注释;仅容下表:

原文 所得
「:换行:」 U+000A
「:制表:」 U+0009
「:』:」 』
「:「::」 「:

反斜 \n 不特释,未知转义拒之。注释遇 「: 增深,遇 :」 减深,外层闭乃出。注释无运行作用而存文字与方向;本行已有元素则后置,否则前置,换行清其状态。

词二:由名辨数与内建

绑定既成,惟自由名依次辨之,不再改已绑定索引。先阳、阴、元;次完整内建类型名 《《内建类型:字符串》》 等,七类为字符串、整数、小数、动态分类值、有、爻、元类型;次完整爻阳阴与有元之名,及类型篇所列内建术。

余非空名,诸符皆在 0123456789.零一二三四五六七八九点,乃尝解析数。无点则十进逐位积;一分隔则分整小部;多分隔不作数。名首字为 负,余依此法为含数字之数者,得其负数:负一二 为负十二,负一点五 为负一点五;惟认一 负,负 独书仍为名。未成者仍为自由名。一二三 为一百二十三;十、-1、1e3 不由此法识。空分隔部依实际分隔与用例判,不谓扫描成功即数有效。数非任意精度;小数字面兼存阿拉伯整小部及宿主近似,生常量取前者,不取六位打印之文。

能辨为数之名(上第四条,含 点、负一 之类)惟为数之字面。令、复令、得、设、得、凡、化 所引之局部名(含带签之函之形参名)若为此等名,编译器报误:“数字名不能用作局部名:「名」(文件)”;故局部之名须含至少一非数字之字,如 项一、点位。模式匹配中以常量相配之数(如 或有「零」则 …)乃数之字面,仍可用。

词三:卦码

卦曰「名」 书一位式(提案〇〇〇三〇)。卦曰为前缀之辞,紧随径书为 「…」 之名;名中之字依下之记号读为位,唯本节之则识读之。其果为整数:值与爻数(位宽)由名唯一定之,于具体语法之树记为卦码之节,展时化为整数之节,后诸阶不易。

名由记号相属而成,记号凡四类:

类 位宽 记号与值
爻 1 阴 0、阳 1
四象 2 太阴 0、少阴 1、少阳 2、太阳 3
八象 3 地 0、雷 1、水 2、泽 3、山 4、火 5、风 6、天 7
卦 6 六十四卦,值见下表

六十四卦之值,即全名之二位八进制(全名先言上卦,后言下卦):

上\下 地 0 雷 1 水 2 泽 3 山 4 火 5 风 6 天 7
地 0 坤 0 复 1 师 2 临 3 谦 4 明夷 5 升 6 泰 7
雷 1 豫 8 震 9 解 10 归妹 11 小过 12 丰 13 恒 14 大壮 15
水 2 比 16 屯 17 坎 18 节 19 蹇 20 既济 21 井 22 需 23
泽 3 萃 24 随 25 困 26 兑 27 咸 28 革 29 大过 30 夬 31
山 4 剥 32 颐 33 蒙 34 损 35 艮 36 贲 37 蛊 38 大畜 39
火 5 晋 40 噬嗑 41 未济 42 睽 43 旅 44 离 45 鼎 46 大有 47
风 6 观 48 益 49 涣 50 中孚 51 渐 52 家人 53 巽 54 小畜 55
天 7 否 56 无妄 57 讼 58 履 59 遁 60 同人 61 姤 62 乾 63

初爻(最低之位)为第零位,名自左而右由高位书至低位,值为诸记号依位宽相属所成之二进数。位宽以六除之,其余书于最前,谓之头,其后每六爻一卦:

余 头 例 位宽与值
0 无 卦曰「乾乾」 12 位,0xFFF
1 爻 卦曰「阳乾」 7 位,0x7F
2 四象 卦曰「少阳震」 8 位,0x89
3 八象 卦曰「天乾」 9 位,0x1FF
4 爻加八象 卦曰「阴雷师临」 16 位,0x1083
5 四象加八象 卦曰「太阳风」 5 位,30

单一记号亦为卦码:卦曰「乾」 六位,值 63;卦曰「天」 三位,值 7;卦曰「阳」 一位,值 1。头上之记号虽为零(太阴、阴地)亦书之,故位宽恒见于字面,同值同宽书法唯一;印者依值与爻数书回此规范之书。无一记号为他记号之首,连书之名唯一种切法。卦曰〇 紧于诸中缀,恒先约,故 「加」于卦曰「太阳坤」于「二」 之首实参即卦码。

爻数至多六十四;值以无符号之位式存于整数,六十四爻而最高位为阳者值为负,如十进制书大数而回绕。名有不识之字、头与卦之序不合(头后惟卦,爻、四象之后至多复接一八象)、爻数逾六十四,或名空者,皆报误;卦曰 之后非径书之名(如括号、串)亦报误。

语一:句形

带签之书有三:函类之参 化「签」曰 类、匿名之函之参 得「签」曰「名」、调用之实参 于「签」曰 值;签位须名,规约从无签之书,见标签函数类型。可省之参,签名书 化「签」曰 类 可阙,定义书 得「签」曰「名」阙则 值;无签之 化 类 可阙 报误,见标签函数类型签六。

下列为元语法,花括重复、方括可选;并非源码。名、串各有其定界。

文件 = { 声明 "。" | "。" } [ 声明 ] ;
声明 = 导入 | 名 ("者" | "即") 式 "也" | 名 ("乃" | "立") 式 ("也" | "者也") | 式 ;
导入 = ("寻" | "观" | "寻观") 路径 "之书" ;
路径 = 名 { "之" 名 } ;
式 = 名 | 串 | "(" 式 ")"
   | "得" 参名 { "又" "得" 参名 } "而" 式
   | "设" 名 { "又" "设" 名 } "而" 式
   | "化" 参类 { ("又" | "可阙又") "化" 参类 } ("为" | "可阙为") 式
   | "凡" 名 [ "属" 式 ] { "又" "凡" 名 [ "属" 式 ] } "而" 式
   | "令" 名 "为" 式 "而" 式
   | "复令" 名 "属" 式 "即" 式 "而" 式
   | "若" 式 "则" 式 "否则" 式
   | "鉴" 式 "而" 分支 { 分支 }
   | 式 ("且" | "或") 式
   | 式 ("于" | "以" | "又以" | "之" | "中" | "与" | "合" | "属" | "而后" | "接") 式
   | 式 "于" 名 "曰" 式
   | 式 ("加" | "减" | "乘" | "除以" | "大于" | "小于" | "等于" | "不等于") 式
   | "非" 式
   | "卦曰" 名
   | 序列首 "【" [ 式 { "," 式 } [ "," ] ] "】" ;
参名 = 名 [ "曰" 名 ] [ "属" 式 ] [ "阙则" 式 ] ;
参类 = [ 名 "曰" ] [ 名 "属" ] 式 ;
分支 = "或有" 式 "则" 式 ;
序列首 = 名 ;

切句惟圆括深度零而遇具体 。;空句弃,末无句号之非空句亦析。名串内句号已在令牌中。普通括号不容内联结构。鉴无自有末也;也常归外声明。鉴之诸支(首支亦然)皆书或有(提案〇〇〇二四);或有为一辞,二字相连恒作一辞;单字且、或为短路之爻算:甲且乙即若甲则乙否则阴,甲或乙即若甲则阳否则乙(提案 00022);合非联合类。卦曰为前缀之辞,后接一名,书一位式,见词三。

若之否则后,可径复书一若,成右嵌之否则若链。链之末支,可为全式令 x 为 a 而 b;此令之而惟引 b,b 毕而后之而归外之尚须之符(如复令…即 得…而 … 而 … 中归彼得与外之复令),与惟则、否则两层同。多书一而者,报言其不接,且自望中去此已遇之辞。

语二:成树之术

操作符由固定文字、式槽 〇、绑定槽 □ 成。保存各组件候选,不以最长关键词尽弃短者;惟中缀之辞同处可合长短数者留其最长,故或有不析为或、有。绑定槽惟一名并接固定组件,式槽参递归解析。

可用共享子树之图表解析或多状态移入规约:逐读、扩候选、完模式而规约;两规约相争,查关系表。左规约先完左式,右规约使右式占槽;未定则留可行状态。形状约束亦须验,如投影之名、序列之首。

终须唯一合法树;无则拒,多不等价亦拒,不凭容器首项。括号强内部先成,自身不入类型树。表所不载者,依关系表篇末后备之则定之。且、或惟彼此有序,与他中缀之符混书须括,否则报“未定义优先级关系”;遇或有则前支之体先收,内鉴除外,见关系表。

f 于 a 于 b 脊为 a、b;f 于 卦曰「甲」 于 b 脊为 卦曰「甲」、b;f 于 a 接 b 为 f 于 (a 接 b);a 或 b 且 c 为 a 或 (b 且 c);A 合 F 于 X 为 A 合 (F 于 X);f 于 「列」【a,b】 为 f 于 (「列」【a,b】),「组值」【…】 属 T 为 (「组值」【…】) 属 T:序列头与紧前之名结合最紧,尾逗之 【…,】 亦然。空白先弃,不设英语词界。

语三:构树与糖

析先得具体语法之树(提案〇〇〇二六):括号、且或、接、卦曰「名」(卦码之节,存值与爻数),及 「列」【…】、「组值」【…】、「组类」【…】 之序,皆存其原(序首记为具体字符之节;组值、组类之有名项先析为命名项之节,免为外之同名绑定视为变);调用、箭、隐量、元组皆依源以二元或单层记之;数唯存其值(全以数字成之名记为整数、小数之节,声明之名与导入之径除外),书法由印者定之。乃展之:自下而上去括号、展诸糖,并行下所言之合与平,所得即下之树。印用未展之树。句号后同行之后注归前一声明,为其顶层后注。

得为显式抽象,得…属为有标注显式抽象,设为隐式类参抽象。绑定仅及其体,不及参数类型。化 A 为 B 若 B 已为连续箭头,则前加 A;又化与嵌套之为同义;凡引全称,相邻全称合数。化带名之形(化 a 属 T 为 B):T 语法上为类(或相应之节)则告错,类参书为凡;否则造依值之箭(体及其名)或常箭。凡带名之形(凡 a 属 T 而 B):T 为类则为隐式全称,否则为隐值参数。皆见依值类型;不以任意等义别名代类。

于、以分别追加显隐实参,已有脊不复二叉包裹。e 属 A 左物右类,运行只存 e。令之名仅及后式;复令之名分别及定义与后式,不及其类型。甲 而后 乙 先甲后乙,得乙。

与、合展平右元组,左元组仍嵌套。中之右为整数常量者按序取项,其序为常数;为他名者按名取项,检查时换为其序;之之右须名称,静态投影。接先按字符串检查并绑定左右,再调用内建之字符串拼接,临名须避捕获。甲 加 乙 诸算较中缀与 非 甲,即 「加」于 甲 于 乙、「非」于 甲,依域寻名。卦曰「名」读名得(值,爻数),先记为卦码之节(印时依爻数书回规范之卦名),展之为整数之节,值原样带去,见词三。

列括号依右折成缀与罄,空者罄;模式同化。典留配置树,普通运行检查不以为字典值。组值、组类为元组之值与类之列式,依列项直成元组:书几项即几项,项自为元组者(括中之 b 与 c、B 合 C 亦然)存为一项而嵌之;项作「名」者值也(组值)、「名」乃类也(组类)者为命名元组。项或皆有名或皆无名,名不可重;空者为元、有,一项为一元组;模式同化。扩展头留相应阶段解释,不任意执行。余首为构造之书(提案〇〇〇一八议十九):阐述记为构造之节,名称解析依常名求其首,类检依构造调用之约降为带签之调,见《标签函类》签七。

括号不阻右元组或箭头展平:a 与(b 与 c) 三项,(a 与 b)与 c 首项嵌套。亦不可凭括号增部分应用之界。

平否视右之字面,值与类同一则:右之字面为元组(b 与 c、B 合 C、「组值」【…】,括号无碍)则平;右为变量、调用、令 诸求得元组之式,则值存为嵌之一项。故值 a 与 x(x 为二元之变量)为二元,其类当书 「组类」【A,(B 合 C)】,或借类之别名书 A 合 P(P 即 B 合 C);书 A 合(B 合 C) 则平为三元而不合。

元组之平唯与、合有之。列式依项而成:「组值」【a,(b 与 c)】 为二元,次项为二元之 b 与 c;「组值」【a,b 与 c】 同之;「组类」【A,(B 合 C)】 亦然。a 与「组值」【b,c】 右已为元组,依与之则平为三项。

语四:声明预处理

乃与紧随同名者/即合一项;孤签名、异名、中夹声明皆拒。惟六种之文之孤签(无体之声),合前补其义,以文缀定其供者:。内建。豫 编译器供之,所补之体调内原语,类型检查依原语表校其签;。接口。豫 宿主供之(构建时绑适配,则适配同名之 。豫 先得,接口之文不编),所补之体调宿主导入,代码生成书为带型之 Wasm 导入,宿主无实则调之即报「接口函数未绑定:模块.字段」;。应用接口。豫 应用供之,所补之体调应用接口,入口定同名之函则编为导出(见网页汇编接口网五),入口未实而见调则抛可承之异;底层内建之声 。底层内建。豫 依底层原语表校之而就地生令,底层接口 。底层接口。豫 编为 Wasm 之导入,模块名乃接口文件之名(见《底层模式》七);着色内建之声 。着色器。接口。豫 补占位之义,其值以所声之类抛「接口函数未绑定:名」之异。所补之体逐参受之,见类型与模块类六。故诸文皆可导可检。合后对定义同名抽象;声明类型箭头/全称,或定义为函数,则设递归,否则去顶层绑定。无签名者无此自动递归。

普通命名项初为公开,无私有关键字。裸顶层式给内部匿名名而占定义位;惟试、脚本与金样许之,常源文之顶层惟有定义(见执行与编译行一)。寻、观先展内部操作,名称解析再消费或展开它们;不得把源码行序直接当 ABI 定序。

语五:解析试例

「一」属「数」 是标注;「数」中「一」 虽成语法,验类当败。中后非数名,语法拒;首为「列」「典」「组值」「组类」与「《《扩展名》》」以外之名者,「甲」【「一」】 为构造之书,依《标签函类》签七降为带签之调;首不得则报“未定义的构造「甲」”。裸一或 1 非数字式,须在「」中。整数之字面验为「小数」者作小数之字面(提案〇〇〇一八),如 (「秒」于「三」)。定界未闭,于其态报错,不吞下一文件。卦曰「少阳震」 展为整数 137;卦曰 之后书括号、串等非名之式则语法拒之,名不合卦码书法则报误,见词三。