词法分析
引入
词汇
| English | 释义 | 拼音 |
|---|---|---|
| tokens/ˈtəʊkənz/ | 记号 | jì hào |
字符进,记号出
- 每个记号类是一个正则;词法器的 DFA 贪心最长匹配地扫源码,发出(类型,词素,位置)。空白与注释丢弃;位置留给报错。

{exercise:uni-cs1104-tokens}
练习
词法器发出——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
类型给分析器、词素给报文、位置给报错。
为何最长匹配
- 正则
if、ident、num在前缀上重叠:贪心最长匹配把ifx判为一个 IDENT 而非if+x——并列时按优先级。搞错它,所有以 if 开头的变量都坏。 - 课程行
count = a1 + b2;词法化为 IDENT、ASSIGN、IDENT、PLUS、IDENT、SEMI,列号 1、7、9、12、14、16。
{exercise:uni-cs1104-longest}
练习
输入 ifx 词法化为——
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
贪心最长匹配:ident 正则允许更长的词素。
错误策略即规格
12abc贪心化为 NUM(12) 加 IDENT(abc):有的语言合法、有的报错。本课程报错——错误策略属于词法器规格,不是事后补丁。- 丢了位置,后面每个诊断都会退化:位置从词法器流经语法器直达语义错误。
{exercise:uni-cs1104-policy}
练习
课程行 count = a1 + b2; 词法化为——个记号。
难度 1/5 · 今日首次完成可获 100 金币及少量额外奖励
IDENT、ASSIGN、IDENT、PLUS、IDENT、SEMI——六个。