0

我必须为具有(除其他外)表单列表的语言制作词法分析器,[1,2,3]例如 或['c','s','q','t'].

我真的不明白我是否需要在词法分析阶段匹配列表。所以,例如会

2:[1,2,3];

NUM(2) 冒号 LSQBRACKET NUM(1) 逗号 NUM(2) 逗号 NUM(3) RSQBRACKET SEMI

或者

NUM(2) 冒号列表([1,2,3]) 半

谢谢你的帮助。

4

1 回答 1

1

从技术上讲,这取决于您。如果您只需要匹配非常简单的列表文字,那么也许您可以将它们视为字符串文字。(但是,这可能不是一个好方法)。

您通常希望词法分析器输出一系列简单的标记。词法分析器应该相对简单——一个经验法则是它永远不需要递归。

因此,例如,要求它输出“LIST”标记会适得其反——词法分析器必须在嵌套列表上递归,这意味着它将实现一个迷你解析器。将该工作留给解析器。

第一种情况使词法分析器更简单,这对于后期解析器仍然有用。

于 2013-03-08T09:17:40.767 回答