首页 > 解决方案 > 词法分析器是使用分隔符创建标记流还是逐个字符地向前看?

问题描述

我试图了解编程语言中的词法分析器是如何工作的。

以 Java 之类的语言为例。我想象词法分析器首先使用分隔符将其拆分为标记流,然后根据一些正则表达式对标记进行分类。

这种方法起初对我来说似乎是合理的,但后来我意识到 Java 可以调整语句,例如:

诠释 x=2;

这应该是不可能的,因为 x、= 和 2 之间没有空格分隔符,但 Java 似乎正确地将它们标记为 [identifier][operator][number][;]。

那么在这种情况下,词法分析器实际上是做什么的呢?如果不使用分隔符,他们似乎使用了一些规则,例如:“如果它以字符开头,向前看直到遇到 =、; 或空格”,“如果它以数字开头,那么向前看直到.. ."。但是这种方法听起来很笨拙。如果是这样的话,我看不出正则表达式是如何在这里发挥作用的。

有人可以向我大致解释一下像 Java 这样的词法分析器中的标记化实际上是如何工作的吗?网上的资料只给我一个模糊的概念。

标签: compiler-constructionlexical-analysis

解决方案


推荐阅读