我的 Lexer 应该在词法分析期间区分括号并维护一堆打开的括号。为此,我在我的 fsl 文件中指定了一个辅助函数,如下所示:
let updateBracketStack sign = // whenever a bracket is parsed, update the stack accordingly
match sign with
| '[' -> push sign
| '{' -> push sign
| ']' -> if top() = '[' then pop() else ()
| '}' -> if top() = '{' then pop() else ()
| _ -> ()
堆栈当然是 char 列表的引用。并相应地实现了 push、top、pop。
{
问题是在我添加角色之前一切正常。现在 FsLex 只是随着error: parse error
如果我将字符更改为字符串,即"{"
再次写入 FsLex 就可以了,因此解决方法是将实现更改为字符串堆栈而不是字符。
然而,我的问题是,这种行为从何而来?如果 FsLex,这是一个错误吗?