【发布时间】:2011-09-13 06:58:01
【问题描述】:
解析数字和字符串是词法分析器的工作吗?
考虑到我在询问 lexer 是否应该 parse 输入这一事实,这听起来可能会也可能不会愚蠢。但是,我不确定这实际上是词法分析器的工作还是解析器的工作,因为为了正确地进行词法分析,词法分析器首先需要解析字符串/数字,所以它会如果解析器这样做,似乎代码会被复制。
这确实是词法分析器的工作吗?或者词法分析器是否应该简单地将123.456 之类的字符串分解为字符串123、.、456,然后让解析器找出其余的?使用字符串做到这一点不会那么简单......
【问题讨论】:
-
这是用于 Lex / YACC 之类的吗?
-
@Grady:有点……不是真的。 xD 我正在尝试手工制作自己的词法分析器(希望是解析器),但我不知道哪个应该做什么来解析数字和字符串。我没有使用任何外部工具,如 Lex/YACC,所以在这方面,没有。
-
很有趣,但仍不清楚。您的意思是词法分析器的工作是识别解析器的 type 数字,而不是识别令牌?在这种情况下,正如您所说,您有一种循环引用(它如何在知道类型之前知道要解析的格式)。我认为这就是为什么 C#(例如)允许浮点数(F 和 D)上的后缀来消除词法分析器的双精度浮点数的歧义。我的猜测是,当词法分析器完成时,应该没有关于标记的问题,但可能有一些关于类型的问题。必须精心设计文字格式以实现这一点。
-
@harpo:不,我指的不是类型。 (或者我是吗?我想我对你所说的“类型”感到困惑。)我只是指这样一个事实,一个词法分析器能够说“这里是一个字符串文字”,它需要处理所有的转义码和一切。但如果它所做的只是返回输入的一部分,那么解析器将不得不再次做同样的事情——这就是重复,不是吗?
-
您的意思是它必须通过识别转义序列不会终止字符串,而是它的一部分来“处理”转义序列;并且通过将这个“字面意思”交给解析器,然后解析器的工作就是对它们进行编码。或者,词法分析器可以执行编码并向解析器提供“就绪”字符串。后者对我来说更合适,对于字符串,但对于似乎暗示词法分析器正在将输入 converting 输入为解析器准备好的数字的数字,这似乎超出了范围。只是在这里大声思考。