我必须为一种具有表单[1,2,3]或['c','s','q','t']列表的语言创建一个词汇。
我真的不明白我是否需要在莱克星阶段与名单相匹配。所以,例如
2:1、2、3;
be
NUM(2)冒号LSQBRACKET NUM(1)逗号NUM(2)逗号NUM(3) RSQBRACKET半
或
NUM(2)冒号表(1,2,3)半
谢谢你的帮助。
发布于 2013-03-08 09:17:40
从技术上讲,这取决于你。如果你只需要匹配非常简单的列表文字,那么也许你就可以像对待字符串文本一样对待它们了。(但是,这不太可能是一个好办法)。
您通常希望lexer输出一系列简单的令牌。lexer应该是相对简单的--一个经验法则是它不应该需要递归。
因此,例如,要求它输出一个“列表”标记会适得其反--雷克萨斯将不得不对嵌套列表进行递归,这意味着它将实现一个迷你解析器。将该作业留给解析器处理。
第一个例子提供了一个更简单的lexer,它对于后期的解析器仍然很有用。
https://stackoverflow.com/questions/15290367
复制相似问题