gpt4 book ai didi

parsing - 为解析器标记数字

转载 作者:行者123 更新时间:2023-12-02 12:56:38 25 4
gpt4 key购买 nike

我正在编写我的第一个解析器,并且有一些关于分词器的问题。

基本上,我的分词器公开了 nextToken()应该返回下一个标记的函数。这些 token 通过 token 类型来区分。我认为拥有以下 token 类型是有意义的:

  • 符号(例如 <:=(
  • 空白(制表符、换行符、空格...)
  • 备注(/* ... */之间或//之后到新行之间的注释)
  • 数字
  • IDENT(例如函数或变量的名称)
  • STRING(“....”之间的内容)

现在,你认为这有道理吗?

此外,我正在与 NUMBER 作斗争。 token 类型。您认为进一步将其拆分为 NUMBER 更有意义吗?和一个 FLOAT token 类型?没有FLOAT token 类型,我会收到 NUMBER (例如402),一个SYMBOL (.) 随后是另一个 NUMBER (例如 203)如果我要解析一个 float 。

最后,您认为分词器在遇到 -909 时返回更有意义吗? ?它是否应该返回 SYMBOL -首先,然后是 NUMBER 909或者它应该返回 NUMBER -909马上?

最佳答案

这取决于您的目标语言。

词法分析器背后的要点是返回标记,以便轻松为您的语言编写解析器。假设您的词法分析器在看到与“[0-9]+”匹配的符号时返回 NUMBER。如果它看到非整数,例如“3.1415926”,它将返回 NUMBER . NUMBER。虽然您可以在解析器中处理该问题,但如果您的词法分析器正在执行跳过空格和注释的适当工作(因为它们与您的解析器无关),那么您最终可能会错误地解析诸如“123/* comment ”之类的内容/.\n/ 其他注释 */456"作为 float 。

至于将“-[0-9]+”词法为 NUMBERMINUS NUMBER,这取决于您的目标语言,但我通常会使用 MINUS NUMBER,否则你最终会将“A = 1-2-3-4” 词法为 SYMBOL = NUMBER NUMBER NUMBER NUMBER 而不是 SYMBOL = 数字 减号 数字 减号 数字 减号 数字

当我们讨论这个主题时,我强烈推荐 Language Implementation Patterns 的作者 Terrance Parr 所著的书 ANTLR

关于parsing - 为解析器标记数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3022533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com