问题标签 [fsyacc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
746 浏览

f# - 为什么这个 fsyacc 输入会产生无法编译的 F#?

我的 fsycc 代码给出了一个编译器错误,提示找不到变量,但我不知道为什么。我希望有人能指出这个问题。

线 | NAME {Conc($1)} 和以下行都给出了这个错误:

我理解语法问题,但是 yacc 输入有什么问题?

如果有帮助,这里是 Ast 定义:

和 flex 输入:

0 投票
3 回答
1493 浏览

parsing - 如何捕获没有引号字符的字符串

我正在尝试捕获没有引号的带引号的字符串。我有这个终端

而这个制作

连同这些词法分析器规则

它似乎将导致 a 的所有内容解释QUOTE为一个不解析的单个词素。所以也许我的问题出在语法的其他地方——不确定。我会以正确的方式解决这个问题吗?在我尝试从字符串中排除引号之前,它解析得很好。

更新

我认为以下词法分析器规则可能存在一些歧义

以下规则先于STRING

有没有办法在不包括STRING正则表达式的引号的情况下消除这些歧义?

0 投票
2 回答
406 浏览

parsing - 消除二进制操作的移位/减少错误

fsyacc 正在为所有二进制操作发出移位/减少错误。

我有这个递归生产:

将其更改为

消除了错误(但不是我想要的)。优先级和关联性定义如下:

这是列表文件的摘录,显示了产生错误的状态(另一个状态具有相同的错误)。

您可以看到解析器在所有情况下都发生了变化,我认为这是正确的。至少,我还没有发现行为不正确的情况。

如何重述语法以消除这些错误?

0 投票
1 回答
829 浏览

visual-studio-2010 - 在 Visual Studio 中构建时出现 fsycc 错误

我在 Visual Studio 中使用 fsyacc(使用 Parsed Language Starter 模板),但构建输出不显示发生错误的行/列(仅:fsyacc exited with code 1)。我必须从命令提示符构建才能获取此信息,这在某种程度上否定了 VS 集成的好处。

有没有办法在输出窗口中显示这个?

编辑

以下是输出窗口中未显示的一些错误示例。

这里的成功输出也很高兴看到:

0 投票
1 回答
828 浏览

f# - 获取 FS0035 => 构造已弃用

在基于 fsycc 的项目中,我有这一行:

这是我得到的完整错误描述:

CALast.fs(117,9):错误 FS0035:不推荐使用此构造:此类型缩写具有一个或多个声明的类型参数,这些参数未出现在被缩写的类型中。类型缩写必须使用被缩写类型中所有声明的类型参数。考虑删除一个或多个类型参数,或使用包装底层类型的具体类型定义,例如'type C<'a> = C of ...'。

知道如何解决这个问题吗?

0 投票
1 回答
631 浏览

f# - FSlex/FSyacc 崩溃 - 找不到 FSharp.Core 程序集

我遇到了 FSlex/FSyacc 在我的机器上崩溃的问题。

在上下文中,这是在 Parallels 虚拟机内运行的 Windows 8 Consumer Preview(32 位)上运行的 Visual Studio 11 beta 内。

------ 构建开始:项目:基础,配置:调试任何 CPU ------ C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1546,5):警告 MSB3245:无法解析此引用。找不到程序集“log4net,Version=1.2.11.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。基础 -> C:\Users\nexus\Desktop\Statical\trunk\Statical\Basis\bin\Debug\Basis.dll ------ 构建开始:项目:语法,配置:调试任何 CPU ----- - cd C:\Users\nexus\Desktop\Statical\trunk\Statical\Syntax\ CALL C:\Users\nexus\Desktop\Statical\trunk\Statical\Syntax\fsyacc.cmd CALL C:\Users\nexus\Desktop\ Statical\trunk\Statical\Syntax\fslex.cmd 运行 fsyacc.cmd... CalParser。fsp 正在运行 fsyacc.exe... 未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“FSharp.Core,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。文件名:'FSharp.Core,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'
在 .$FSharp.PowerPack.FsYacc.Driver.main@() 警告:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。注意:与程序集绑定失败日志记录相关的一些性能损失。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。运行 fslex.cmd... 不运行 fslex.exe,因为 CalLexer.fs 比 CalLexer.fsl C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1036,5): 错误 MSB3073 :命令“cd C:\Users\nexus\Desktop\Statical\trunk\Statical\Syntax\ CALL C:\Users\nexus\Desktop\Statical\trunk\Statical\Syntax\fsyacc.cmd CALL C:\Users\nexus \Desktop\Statical\trunk\Statical\Syntax\fslex.cmd”退出,代码为 -532459699。

相关的部分似乎是这样的:

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'FSharp.Core,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。该系统找不到指定的文件。文件名:'FSharp.Core,版本 = 2.0.0.0,文化 = 中性,PublicKeyToken = b03f5f7f11d50a3a'
at .$FSharp.PowerPack.FsYacc.Driver.main@()

不知道为什么它找不到 FSharp.Core 程序集。

想法?

0 投票
1 回答
371 浏览

parsing - 如何在使用 F# FsYacc 进行解析时添加和使用自定义上下文参数?

我在 F# 应用程序中使用FsLexFsYacc进行字符串解析。在抽象语法树 (AST) 创建期间,解析器必须决定如何创建 AST(制作不同的树、抛出异常等)。解析器行为必须依赖于几个参数。

在这里,我发现允许声明如下内容:

但我找不到如何使用这种结构,并且在项目编译期间,“fsyacc.exe”以代码 1 退出。”错误

问题是:在使用 FsYacc 解析期间是否可能以及如何使用上下文参数?

我尝试过的示例:

我期望使用这样的东西:

提前致谢

更新以下异常并在 fsycc.exe 执行期间生成调用堆栈:

0 投票
1 回答
1300 浏览

parsing - 在 F# 中同时进行词法分析和解析

在使用 fslex 和 fsycc 时,是否有一种简单的方法可以让词法分析和解析同时运行?

0 投票
1 回答
284 浏览

parsing - 我可以将参数传递给我的 fsyacc 解析器吗?

我知道可以将参数传递给词法分析器:

但我无法以类似的方式定义我的解析器开始符号。

我试图这样定义它:(感谢这个问题)

但是我必须像这样定义每个非终端符号,它们都会返回 lambdas。不过,这不是我想要实现的目标,我希望能够scope在几个非终端中访问参数并在解析期间执行它们的操作。

我注意到IParseStateParserLocalStore类型中有一个,它只包含(仅通过调试检查)。由于我可以通过每个非终端访问它,我是否可以在其中存储参数,或者这是一个坏主意?LexBufferparseState

我曾考虑在解析器的头部使用可变变量,但它们将是静态的(我认为?),这将阻止我同时解析多个输入......

编辑:

目前我将scope参数存储在特定的令牌中:

我传递scope给 Lexer,他在创建相关标记时将其嵌入到相关标记中......我真的不喜欢这个解决方案,但我无法想出更好的东西。

0 投票
1 回答
130 浏览

f# - F# 整数文件指令

我一直在使用 fslex 和 fsyacc,并且 F# 源文件(.fs它们从 lexer ( .fsl) 和 parser ( .fsp) 规则生成)在所有地方都引用了原始文件.fsl(有时是同一个.fs源文件),并带有这样的语句(数字是行号):

此外,由.fs生成的文件pars.fsp做同样的事情,但额外引用了.fsi与它一起生成的 F# 签名文件 ( )。这些是什么/意味着什么?