软件设计师 · 高频练习

词法单元、词素和模式到底有什么区别?

中级 单选题 第 843 题 中等 软件设计师编译原理词法分析词法单元词素模式
题目

词法分析器读到源程序中的字符序列 count,并按规则 letter(letter|digit)* 将其识别为标识符。下列对应关系正确的是()。

A count 是词法单元,“标识符”是模式,letter(letter|digit)* 是词素
B count 是模式,“标识符”是词素,letter(letter|digit)* 是词法单元
C count 是词素,“标识符”是词法单元,letter(letter|digit)* 是模式
D 三者只是不同教材对同一概念的叫法
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

词素是源程序中实际出现并被匹配的字符序列,本题是 count;词法单元是词法分析器输出的类别,本题是“标识符”;模式描述一类词素应满足的形式,本题用 letter(letter|digit)* 表示。因此三者分别对应实例、类别和识别规则。

选项分析

A

错误。count 不是类别名称,正规式也不是某次扫描得到的具体词素。

B

错误。模式不是源程序中的具体字符,词素也不是抽象类别。

C

正确。count 是实际出现的词素,标识符是词法单元类别,正规式描述识别模式。

D

错误。三个概念相互关联,但承担的角色不同,不能混用。

本题为什么容易错

中文术语看起来都像在说“一个单词”,很容易背成同义词。题目一旦给出具体字符、类别名称和正规式,应该分别贴上“实例、分类、规则”三个标签。

先看结论

简短答案

词法单元、词素和模式到底有什么区别,正确答案是 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)* 则是识别这一类词素的模式。记住实例、类别、规则三层,术语就不会再串。