【发布时间】:2020-05-12 19:24:24
【问题描述】:
我一直在考虑如何实现这一点,但我没有找到真正好的答案。
本质上,我遇到的问题是,给定一个任意大的数组维度,必须有相同数量的 Lexer 状态来跟踪深度,所以这让我开始思考如何表达表-Driven Lexers 真的可以。
对我来说,很明显 DFA 不能计数。那么既然 DFA(离散有限自动机)不能计数,至少不能超出硬编码的限制,那么 TDL 如何支持多维数组呢?
语言是否对您可以拥有多少嵌套数组有硬性限制,或者他们是否使用手工制作的 Lexers 来解决计数的需要?
【问题讨论】:
-
根据我的经验,词法分析器 - 甚至解析器 - 不算数 - 它们依赖于以下语义分析阶段来检查所有(在这种情况下)数组边界是否有效。
-
@500-InternalServerError 当人们说“DFA 无法计数”时,他们通常是在谈论他们无法表达匹配括号之类的条件(即计算当前打开的括号的数量)。当然,解析器确实做到了这一点。我认为 OP 不是在谈论检查数组边界(或者我严重误解了这个问题)。
-
你为什么只用词法分析器来做这个?对您而言,“词法分析”一词是什么意思?
-
@rici 对我来说,词法分析器只是从纯文本中吐出一系列标记。标记是一对、语法实体及其值。
-
@novicegrammer:没错。因此,它不是组装像数组这样的复杂对象的工具。你不需要知道数组元素的索引就知道
42是什么类型的令牌。
标签: compiler-construction lexer dfa