我一直在思考如何实现这个问题,但我没有找到真正好的答案。
本质上,我遇到的问题是,给定一个任意大的数组维度,就必须有等量的Lexer States来跟踪深度,所以这让我思考表驱动的Lexer到底能有多大的表现力。
在我看来,很明显,DFA不能计数。那么既然DFA(Discrete Finite Automatas)不能计数,至少不能超过硬编码的限制,那么TDL如何支持多维数组呢?
语言有没有硬性规定可以有多少个嵌套数组,还是用手工制作的Lexer来考虑计数的需要?
我想,当你说到数组的词法时,你说的是数组的字面意思,比如说 [x, y]
或数组初始化器,如 {x, y}
. 这两个词都不会作为一个单一的标记来解释。它们将被词典化为 [
, x
, ,
, y
, ]
或 {
, x
, ,
, y
, }
分别。这适用于多维数组和一维数组。
请注意,如果你试图将它们变成一个单一标记,即使是单维数组也会遇到问题。由于它们通常可以包含任意的表达式,将它们识别为一个单一的标记意味着词法师必须解析任意的异常,这也涉及到任意的嵌套,而且无论如何都明显超出了词法师的范围。