我必须为某种语言制作词法分析器,该语言包含(例如)[1,2,3]
形式的列表或['c','s','q','t']
。
我真的不明白我是否需要在lexing阶段匹配列表。所以,例如
2:[1,2,3];
是
NUM(2)COLON LSQBRACKET NUM(1)COMMA NUM(2)COMMA NUM(3)RSQBRACKET SEMI
或
NUM(2)个列表([1,2,3])SEMI
感谢您的帮助。
答案 0 :(得分:1)
从技术上讲,这取决于你。如果你只需要匹配非常简单的列表文字,那么也许你可以放弃对待它们有点像字符串文字。 (但是,这可能不是一个好方法)。
您通常希望词法分析器输出一系列简单的标记。词法分析器应该相对简单 - 一个经验法则是它永远不需要递归。
因此,例如,要求它输出“LIST”令牌会适得其反 - 词法分析器必须在嵌套列表上递归,这意味着它将实现一个迷你解析器。将该作业留给解析器。
第一种情况是一个更简单的词法分析器,它对后期解析器仍然有用。