Compilation 代词和词素有什么区别?

Compilation 代词和词素有什么区别?,compilation,compiler-construction,token,Compilation,Compiler Construction,Token,在Aho Ullman和Sethi的编译器构造中,源程序的输入字符串被划分为具有逻辑意义的字符序列,被称为标记,词素是组成标记的序列,那么基本区别是什么呢?使用Aho、Lam、Sethi和Ullman的“”,又名 词素第111页 词素是源程序中的一系列字符 匹配标记的模式,并由词汇表标识 分析器作为该令牌的实例 标记第111页 令牌是由令牌名称和可选属性组成的一对 价值令牌名称是一种抽象符号,表示一种 词法单位,如特定关键字或输入序列 表示标识符的字符。标记名是输入 解析器处理的符号 图案第11

在Aho Ullman和Sethi的编译器构造中,源程序的输入字符串被划分为具有逻辑意义的字符序列,被称为标记,词素是组成标记的序列,那么基本区别是什么呢?

使用Aho、Lam、Sethi和Ullman的“”,又名

词素第111页

词素是源程序中的一系列字符 匹配标记的模式,并由词汇表标识 分析器作为该令牌的实例

标记第111页

令牌是由令牌名称和可选属性组成的一对 价值令牌名称是一种抽象符号,表示一种 词法单位,如特定关键字或输入序列 表示标识符的字符。标记名是输入 解析器处理的符号

图案第111页

模式是对标记的词素可能使用的形式的描述 拿在关键字作为标记的情况下,模式只是 构成关键字的字符序列。对于标识符和一些 对于其他标记,模式是由匹配的更复杂的结构 很多弦

图3.2:第112页令牌示例

[Token]       [Informal Description]                  [Sample Lexemes]
if            characters i, f                         if
else          characters e, l, s, e                   else
comparison    < or > or <= or >= or == or !=          <=, !=
id            letter followed by letters and digits   pi, score, D2
number        any numeric constant                    3.14159, 0, 6.02e23
literal       anything but ", surrounded by "'s       "core dumped"
[Token][非正式描述][示例词素]
如果字符i,f如果
else字符e、l、s、e else
比较<或>或=或==或!= a)令牌是构成程序文本的实体的符号名称;
e、 g.if表示关键字if,id表示任何标识符。这些构成了产品的产量
词法分析器。
五,

(b) 模式是一种规则,用于指定何时从输入中删除一系列字符 构成代币;e、 g令牌if的序列i,f,以及 以字母开头的字母数字表示令牌id

(c) 词素是输入中与模式匹配的字符序列(因此 构成令牌的实例);例如,if与if的模式匹配,并且 foo123bar与id的模式匹配。

标记:标记的类型(关键字、标识符、标点符号、多字符运算符)简单地说就是一个标记

模式:根据输入字符形成标记的规则

词素:源程序中的一个字符序列,由一个标记的模式匹配。
基本上,这是一个象征性的元素

当源程序输入词法分析器时,它首先将字符分解为词素序列。词素然后用于构建令牌,其中词素映射到令牌中。一个名为myVar的变量将被映射到一个标记中,其中“num”应该指向变量在符号表中的位置。

简而言之:

  • 词素是从字符输入流派生的单词
  • 标记是映射到标记名和属性值的词汇表位

示例包括:
x=a+b*2
这就产生了词素:{x,=,a,+,b,*,2}

带有相应的标记:{,,,}

标记:标记是一个字符序列,可以将其视为单个逻辑实体。典型的代币是,
1) 标识符
2) 关键词
3) 操作员
4) 特殊符号
5) 常数

模式:输入中的一组字符串,为其生成与输出相同的标记。这组字符串由称为与令牌关联的模式的规则描述。

词素:词素是源程序中与令牌模式匹配的字符序列。

词素基本上是令牌的单位,它基本上是与令牌匹配的字符序列,有助于将源代码分解为令牌


例如:如果源代码是
x=b
,那么词素将是
x
=
b
,标记将是

由形成标记的模式匹配的字符序列

模式-定义令牌的规则集


标记-编程语言字符集上有意义的字符集合,例如:ID、常量、关键字、运算符、标点符号、文字字符串

让我们看看词法分析器(也称为扫描器)的工作情况

让我们以一个表达式为例:

INPUT : cout << 3+2+3;

FORMATTING PERFORMED BY SCANNER :  {cout}|space|{<<}|space|{3}{+}{2}{+}{3}{;} 

词素-词素是源程序中与标记模式匹配的字符序列,由词法分析器识别为该标记的实例

令牌-令牌是由令牌名称和可选令牌值组成的一对。标记名是词汇单位的一个类别。常用的标记名包括

  • 标识符:程序员选择的名称
  • 关键词:编程语言中已有的名称
  • 分隔符(也称为标点符号):标点符号和成对分隔符
  • 运算符:对参数进行运算并产生结果的符号
  • 文字:数字、逻辑、文本、引用文字
考虑编程语言C中的这个表达式:

总和=3+2

标记并由下表表示:

 Lexeme        Token category
------------------------------
sum      |    Identifier
 =       |    Assignment operator
 3       |    Integer literal
 +       |    Addition operator
 2       |    Integer literal
 ;       |    End of statement
词素-词素是一个字符串,是编程语言中最低级别的语法单位

标记-标记是一个句法范畴,形成一个词素类,意味着该词素属于哪个类别,是关键字、标识符还是其他任何类别。词法分析器的主要任务之一是创建一对词素和标记,即收集所有字符

让我们举一个例子:-

 Lexeme        Token category
------------------------------
sum      |    Identifier
 =       |    Assignment operator
 3       |    Integer literal
 +       |    Addition operator
 2       |    Integer literal
 ;       |    End of statement