【发布时间】:2012-12-20 12:25:47
【问题描述】:
我正在尝试在 haskell 中实现 js 解析器。但我坚持使用自动分号插入。我创建了test project 来解决问题,但我不知道如何解决问题。
在我的测试项目程序中是一个表达式列表(一元或二元):
data Program = Program [Expression]
data Expression
= UnaryExpression Number
| PlusExpression Number Number
输入流是一个标记列表:
data Token
= SemicolonToken
| NumberToken Number
| PlusToken
我想解析如下输入:1; - 一元表达式1 + 2; - 二进制表达式1; 2 + 3; - 两个表达式(一元和二进制)1 2 + 3; -与之前的输入相同,但缺少第一个分号。因此解析器使用标记 1,但任何语法生成都不允许标记 2(下一个预期标记是分号或加号)。自动分号插入规则表示,在这种情况下,分号会自动插入到标记 2 之前。
那么,实现这种解析器行为的最优雅的方式是什么。
【问题讨论】: