自己写:把手写规则翻译成正则

补全 PAT 里数字和字符串两条规则,输出那段源码切出的词数。 let rate = 12; let msg = "hi there"; total = rate >= 3; 玩具语言的词法规则:关键字 let i

开始练习 →

自己写:按最长匹配挑规则

不用正则引擎的自动选择,自己实现一次:补全 pick,在所有能匹配的规则里挑最长的,一样长就挑写在前面的。

开始练习 →

自己写:正则版和手写版对拍

补全 compare,把正则切法和手写切法逐个比对,输出两个数量和比对结论。 let rate = 12; let msg = "hi there"; total = rate >= 3;

开始练习 →

行号和列号该在什么时候记

要报出非法字符在第几行第几列,行列号应该【0】。

开始练习 →

列号应该在什么时候归一

扫描器读到一个换行符时,正确的做法是【0】。

开始练习 →

非法字符在第几行第几列

下面这段源码里有一个玩具语言不认识的字符。输出它的位置,格式 行:列,行列都从 1 数起。 let ok = 1; total = ok @ 2; 玩具语言的词法规则:关键字 let if else while;标识符以字母或下划线开头;数

开始练习 →

字符串没收尾,错误报在哪

下面这段源码的第二行有个字符串忘了收尾引号。输出扫描器报错的位置,格式 行:列。 let a = 1; let b = "no end; let c = 2; 玩具语言的词法规则:关键字 let if else while;标识符

开始练习 →

自己写:一路维护行号列号

补全 walk,扫过整段源码并维护行列号,输出走完之后的行号和列号。

开始练习 →

自己写:报出非法字符的位置

补全 find_bad,返回第一个非法字符的 行:列,没有非法字符则返回 没问题。两段各判一次。 玩具语言的词法规则:关键字 let if else while;标识符以字母或下划线开头;数字是连续的数位;字符串用一对双引号括起来(不含转义

开始练习 →

自己写:把出错的那一行指出来

补全 caret,返回一个由 - 组成、在出错列上放一个 ^ 的指示串(长度等于出错列)。

开始练习 →