两种字面量各取到什么
把 x = 12abc + "a;b"; 切成 Token,输出每个词的原文用 / 拼起来。 玩具语言的词法规则:关键字 let if else while;标识符以字母或下划线开头;数字是连续的数位;字符串用一对双引号
自己写:取一个完整的数字
补全 read_number,从 i 开始取连续数位,返回 (词, 下一个位置)。三个位置各取一次。
自己写:取一个完整的字符串
补全 read_string,从开引号取到收尾引号(含两个引号),里面的字符一律原样保留。
自己写:数字和字符串一起切
补全 scan 里数字和字符串这两条分支,输出那段源码切出的词数。 let rate = 12; let msg = "hi there"; total = rate >= 3;
自己写:把内容也核一遍
光对上数量不够。补全 audit,把切出来的词和标准答案逐个比对,返回第一个不一样的位置(从 1 数起),全对则返回 全对。
正则和手写扫描器是什么关系
用正则写词法分析器,和手写逐字符扫描相比,它【0】。
多条正则一起匹配时按什么挑
多条词法正则同时能匹配上,词法分析器挑【0】的那一条。
长度一样时靠什么分胜负
两条正则匹配出来一样长时,词法分析器按【0】决定用哪条。
一条正则切出来和手写一样吗
把手写扫描器换成一条正则(规则顺序:关键字、标识符、数字、字符串、双字符运算符、单字符运算符),输出两个数:正则切出的词数,以及和手写结果内容不同的词有几个。 let rate = 12; let msg = "hi there&
关键字规则放错位置会怎样
有人把关键字那条正则去掉了词尾边界(写成 let|if|else|while),并且仍然排在标识符前面。输出这样切 let letter = 1; 得到几个词。 KEYWORDS = ("let", "if&q