词法分析器的标记粒度

问题描述 投票:0回答:1

我想自己构建一个小词法分析器和解析器。我希望词法分析器生成一个标记向量,稍后将其输入到解析器中。现在我想一下什么属于哪个阶段。

让我们看看这个输入:

xy = 1.23

我的令牌流可能是以下之一 - 或两者的混合:

  1. letter letter whitespace eqsign whitespace digit dot digit digit
  2. identifier eqsign decimal

为了进一步处理输入,我当然需要(2)。但词法分析器阶段能在多大程度上完成这项工作呢?我还可以想到 2 个连续的词法分析器阶段,其中 Lexer1 将从

String
生成 (1),而 Lexer2 将从
List<Lexer1Token>
生成 (2)。

类似地,对于 HTML 中的

<b>test</b>
,标记可能是

  1. lt string gt string lt slash string gt
  2. opentag[type=b] string closingtag[type=b]
parsing tokenize lexer
1个回答
0
投票

显然,这取决于您的语言(例如,您的语言可能需要对

.``.
进行特殊处理),但在大多数情况下,您只需要版本 2,
[identifier, equal, decimal]
(我称之为
assign
)。

让词法分析器在不进入解析器域的情况下尽可能多地执行操作(例如,决定顺序是否有效)。

© www.soinside.com 2019 - 2024. All rights reserved.