Lexer应解析并索引文字

时间:2017-10-16 17:49:02

标签: compiler-construction lookup compiler-optimization literals lexer

Wikipedia says

  

词法令牌或简称​​令牌是一对由令牌名称和可选令牌值组成的对

我花了很多时间试图找出一个令牌值应该是一个字符串,或者它是否也像查找索引一样。

这是查找索引的示例。请考虑以下文字:

99

哪会产生以下标记:
(请注意,315是用于查询查找表的令牌查找索引)

sample-token
    <integer-literal, 315>

然后,此令牌与其查找表紧密耦合,包含实际令牌值:

integer-lookup-table
    ...
    <315, 99>
    ...

整数是最基本的例子。例如,字符串文字的逻辑变得相当复杂。在字符串文字标记中存储查找索引需要Lexer解析字符串的内容(转义序列等)。 这仍然是Lexer的工作,还是应该延迟到后期阶段,如语义分析?有一个simmilar question,其中解决了词法分析过程中的字符串转义。

我可以想到使用这些查找索引的以下优点和缺点:

赞成

  • 编译器的后期阶段不需要知道有关文字的详细信息,可以使用数字来引用它。
  • 较小的内存占用(字符串通常是堆分配的)。每个文字都分配一次而不是N次。
  • 由于简单的数值而不是长字符串,编译器可以更好地进行优化。

缺点

  • Lexer的工作变得更加困难。语义验证需要由Lexer部分执行。 ("\z"可能是无效的逃脱)
  • 文字语法的变化要求改变词汇表。 Which, as I learned, should be avoided

0 个答案:

没有答案