自己写:把手写规则翻译成正则
补全 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,返回一个由 - 组成、在出错列上放一个 ^ 的指示串(长度等于出错列)。