首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FsLex在'{‘上因分析错误而中止

FsLex在'{‘上因分析错误而中止
EN

Stack Overflow用户
提问于 2016-11-11 17:50:19
回答 1查看 170关注 0票数 3

我的词法分析器应该在词法分析过程中区分括号并维护一堆打开的括号。为此,我在fsl文件中指定了一个helper函数,如下所示:

代码语言:javascript
复制
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列表的ref。并相应地实现了push、top、pop。

问题是,在我添加{字符之前,一切都正常进行。现在FsLex和error: parse error一起死了

如果我将字符更改为字符串,即再次写入"{" FsLex,那么解决方法是将实现更改为字符串堆栈而不是字符堆栈。

然而,我的问题是,这种行为从何而来?如果是FsLex,这是一个bug吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 08:20:50

FsLex的解析器是使用FsLexYacc生成的。消息"parse error“表示词法分析(您的.fsl文件),直到错误位置成功,但在该位置解析失败。要找到根本原因,您需要将完整的输入文本发布到FsLex。

这只是猜测。FsLex可能会被'{‘字符混淆,因为它也是嵌入式代码块的开放令牌?或者您的输入文本包含一些特殊的unicode字符,但它看起来像编辑器中的空格?

一种可能的解决方法是,在LexHelper.fs中创建另一个模块和.fs文件LexHelper模块,并将帮助器函数放入其中,然后从.fsl文件中打开它。

编辑

查看FsLexYacc的源代码,它不能处理嵌入式F#代码中用单引号括起来的}字符,但如果用双引号括起来,它就能处理。

https://github.com/fsprojects/FsLexYacc/blob/master/src/FsLex/fslexlex.fsl

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40545282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档