compiler-construction - 词法分析器是使用分隔符创建标记流还是逐个字符地向前看?
问题描述
我试图了解编程语言中的词法分析器是如何工作的。
以 Java 之类的语言为例。我想象词法分析器首先使用分隔符将其拆分为标记流,然后根据一些正则表达式对标记进行分类。
这种方法起初对我来说似乎是合理的,但后来我意识到 Java 可以调整语句,例如:
诠释 x=2;
这应该是不可能的,因为 x、= 和 2 之间没有空格分隔符,但 Java 似乎正确地将它们标记为 [identifier][operator][number][;]。
那么在这种情况下,词法分析器实际上是做什么的呢?如果不使用分隔符,他们似乎使用了一些规则,例如:“如果它以字符开头,向前看直到遇到 =、; 或空格”,“如果它以数字开头,那么向前看直到.. ."。但是这种方法听起来很笨拙。如果是这样的话,我看不出正则表达式是如何在这里发挥作用的。
有人可以向我大致解释一下像 Java 这样的词法分析器中的标记化实际上是如何工作的吗?网上的资料只给我一个模糊的概念。
解决方案
推荐阅读
- r - R:替换非 na 值前后的 NA
- c++ - 如何找出哪些库链接到现有可执行文件并适当地重新链接和重新编译代码?
- google-bigquery - BigQuery 中未嵌套的 json 对象的字符串化数组
- c# - 如何使用图像的一部分作为按钮的背景?
- r - R将不同的功能映射到嵌套列表
- python - 组合python非常大的数字列表
- java - 如何在 GUI 中编写 Eclipse BUILT
- c# - Telerik:.Net Core 的搜索栏组件未显示/未定位
- excel - 比较不是真的;但发送到 MsgBox 的值显示它应该是
- python - 无法从外部访问应用程序时处理 Microsoft 身份验证响应