Table 驱动的词法分析器可以 "lex" 多维数组吗?
Can Table-Driven Lexers "lex" Multi-Dimensional Arrays?
我一直在思考如何实现这一点,但我没有找到真正好的答案。
本质上,我 运行 遇到的问题是,给定一个任意大的数组维度,就必须有等量的 Lexer States 来跟踪深度,所以这得到了我在想 Table-Driven Lexers 的表现力到底有多大。
对我来说很明显 DFA 不能计数。那么既然 DFA(离散有限自动机)不能计数,至少不能超出硬编码限制,那么 TDL 如何支持多维数组?
语言是否对您可以拥有多少个嵌套数组有硬性限制,或者它们是否使用手工制作的词法分析器来计算计数的需要?
我假设当您谈论对数组进行词法分析时,您是在谈论像 [x, y]
这样的数组文字或像 {x, y}
这样的数组初始值设定项。这些都不会被作为单个标记进行词法分析。它们会被词法化为 [
、x
、,
、y
、]
或 {
、x
、[=分别为 14=、y
、}
。这适用于多维数组和一维数组。
请注意,如果您尝试将它们变成单个标记,即使是一维数组,您也会 运行 遇到问题。由于它们通常可以包含任意表达式,将它们识别为单个标记将意味着词法分析器必须解析任意异常,这也涉及任意嵌套并且显然超出了词法分析器的范围。
我一直在思考如何实现这一点,但我没有找到真正好的答案。
本质上,我 运行 遇到的问题是,给定一个任意大的数组维度,就必须有等量的 Lexer States 来跟踪深度,所以这得到了我在想 Table-Driven Lexers 的表现力到底有多大。
对我来说很明显 DFA 不能计数。那么既然 DFA(离散有限自动机)不能计数,至少不能超出硬编码限制,那么 TDL 如何支持多维数组?
语言是否对您可以拥有多少个嵌套数组有硬性限制,或者它们是否使用手工制作的词法分析器来计算计数的需要?
我假设当您谈论对数组进行词法分析时,您是在谈论像 [x, y]
这样的数组文字或像 {x, y}
这样的数组初始值设定项。这些都不会被作为单个标记进行词法分析。它们会被词法化为 [
、x
、,
、y
、]
或 {
、x
、[=分别为 14=、y
、}
。这适用于多维数组和一维数组。
请注意,如果您尝试将它们变成单个标记,即使是一维数组,您也会 运行 遇到问题。由于它们通常可以包含任意表达式,将它们识别为单个标记将意味着词法分析器必须解析任意异常,这也涉及任意嵌套并且显然超出了词法分析器的范围。