词法分析器读到源程序中的字符序列 count,并按规则 letter(letter|digit)* 将其识别为标识符。下列对应关系正确的是()。
词素是源程序中实际出现并被匹配的字符序列,本题是 count;词法单元是词法分析器输出的类别,本题是“标识符”;模式描述一类词素应满足的形式,本题用 letter(letter|digit)* 表示。因此三者分别对应实例、类别和识别规则。
选项分析
错误。count 不是类别名称,正规式也不是某次扫描得到的具体词素。
错误。模式不是源程序中的具体字符,词素也不是抽象类别。
正确。count 是实际出现的词素,标识符是词法单元类别,正规式描述识别模式。
错误。三个概念相互关联,但承担的角色不同,不能混用。
本题为什么容易错
中文术语看起来都像在说“一个单词”,很容易背成同义词。题目一旦给出具体字符、类别名称和正规式,应该分别贴上“实例、分类、规则”三个标签。
简短答案
词法单元、词素和模式到底有什么区别,正确答案是 C(count 是词素,“标识符”是词法单元,letter(letter|digit)* 是模式)。词素是源程序中实际出现并被匹配的字符序列,本题是 count;词法单元是词法分析器输出的类别,本题是“标识符”;模式描述一类词素应满足的形式,本题用 letter(letter|digit)* 表示。因此三者分别对应实例、类别和识别规则。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| count 是词法单元,“标识符”是模式,letter(letter|digit)* 是词素 | 本题干扰项 | 错误。count 不是类别名称,正规式也不是某次扫描得到的具体词素。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| count 是模式,“标识符”是词素,letter(letter|digit)* 是词法单元 | 本题干扰项 | 错误。模式不是源程序中的具体字符,词素也不是抽象类别。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| count 是词素,“标识符”是词法单元,letter(letter|digit)* 是模式 | 本题正确答案 | 正确。count 是实际出现的词素,标识符是词法单元类别,正规式描述识别模式。 | 看到题干核心场景时优先联想到它 |
| 三者只是不同教材对同一概念的叫法 | 本题干扰项 | 错误。三个概念相互关联,但承担的角色不同,不能混用。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- count 是词法单元,“标识符”是模式,letter(letter|digit)* 是词素:错误。count 不是类别名称,正规式也不是某次扫描得到的具体词素。
- count 是模式,“标识符”是词素,letter(letter|digit)* 是词法单元:错误。模式不是源程序中的具体字符,词素也不是抽象类别。
- 三者只是不同教材对同一概念的叫法:错误。三个概念相互关联,但承担的角色不同,不能混用。
知识点详解
词法分析把字符流切分成词法单元序列。词法单元通常写成〈类别, 属性值〉,例如〈id, 指向符号表中 count 条目的指针〉。词素是本次匹配到的原始字符序列,模式则描述某类词素的共同形式。一个模式可以匹配许多词素,许多不同词素又可归入同一词法单元类别。三者的关系不是并列同义,而是规则识别实例,再把实例归类。
备考速记
token 看类别,lexeme 看原字,pattern 看规则。
模式在模式场景中的作用
模式在本题中的核心价值,是解决“词法分析器读到源程序中的字符序列 count,并按规则 letter(letter|digit)* 将其识别为标识符。下列对应关系正确的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出标识符或数值常量,判断 token、lexeme、pattern 的对应关系。
- 询问词法分析器输出什么,以及符号表中通常保存哪些属性。
- 把正规式、有限自动机和词法单元识别联系起来考查。
模式在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把模式放到模式场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
别急着背三个中文名,可以把它们放进一次点名:老师喊“标识符”这个类别,count 是这次真正来报到的名字,而 letter(letter|digit)* 是判断谁有资格站进这个队伍的规则。类别、实例、规则一分开,答案就很清楚。
考点定位
区分 token、lexeme 和 pattern:token 是类别,lexeme 是源程序中的具体字符序列,pattern 是描述该类别词素集合的规则。
易错提醒
- 把词法分析器输出的 token 类别和源代码里的具体拼写当成同一个对象。
- 看到正规式就叫词法单元,没有意识到正规式描述的是模式。
- 认为同一词法单元只能对应一个词素,例如忽略 count、sum、x 都可属于标识符。
备考提示
- 自己列三组例子:标识符/count/标识符正规式,整数/1024/数字正规式,关系运算符/>=/运算符模式。
- 做题时先圈出源代码里实际出现的字符序列,它通常就是词素。
你可能还想了解
- token 和 lexeme 为什么不能混为一谈?
- 一个词法单元可以对应多少个词素?
- 词法分析器输出的属性值有什么作用?
- 正规式在词法分析阶段描述什么?
本文小结
count 是源程序中实际出现的词素,“标识符”是它所属的词法单元类别,letter(letter|digit)* 则是识别这一类词素的模式。记住实例、类别、规则三层,术语就不会再串。