问题标签 [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.
f# - 为什么这个 fsyacc 输入会产生无法编译的 F#?
我的 fsycc 代码给出了一个编译器错误,提示找不到变量,但我不知道为什么。我希望有人能指出这个问题。
线 | NAME {Conc($1)} 和以下行都给出了这个错误:
我理解语法问题,但是 yacc 输入有什么问题?
如果有帮助,这里是 Ast 定义:
和 flex 输入:
parsing - 如何捕获没有引号字符的字符串
我正在尝试捕获没有引号的带引号的字符串。我有这个终端
而这个制作
连同这些词法分析器规则
它似乎将导致 a 的所有内容解释QUOTE
为一个不解析的单个词素。所以也许我的问题出在语法的其他地方——不确定。我会以正确的方式解决这个问题吗?在我尝试从字符串中排除引号之前,它解析得很好。
更新
我认为以下词法分析器规则可能存在一些歧义
以下规则先于STRING
有没有办法在不包括STRING
正则表达式的引号的情况下消除这些歧义?
parsing - 消除二进制操作的移位/减少错误
fsyacc 正在为所有二进制操作发出移位/减少错误。
我有这个递归生产:
将其更改为
消除了错误(但不是我想要的)。优先级和关联性定义如下:
这是列表文件的摘录,显示了产生错误的状态(另一个状态具有相同的错误)。
您可以看到解析器在所有情况下都发生了变化,我认为这是正确的。至少,我还没有发现行为不正确的情况。
如何重述语法以消除这些错误?
visual-studio-2010 - 在 Visual Studio 中构建时出现 fsycc 错误
我在 Visual Studio 中使用 fsyacc(使用 Parsed Language Starter 模板),但构建输出不显示发生错误的行/列(仅:fsyacc exited with code 1)。我必须从命令提示符构建才能获取此信息,这在某种程度上否定了 VS 集成的好处。
有没有办法在输出窗口中显示这个?
编辑
以下是输出窗口中未显示的一些错误示例。
和
这里的成功输出也很高兴看到:
f# - 获取 FS0035 => 构造已弃用
在基于 fsycc 的项目中,我有这一行:
这是我得到的完整错误描述:
CALast.fs(117,9):错误 FS0035:不推荐使用此构造:此类型缩写具有一个或多个声明的类型参数,这些参数未出现在被缩写的类型中。类型缩写必须使用被缩写类型中所有声明的类型参数。考虑删除一个或多个类型参数,或使用包装底层类型的具体类型定义,例如'type C<'a> = C of ...'。
知道如何解决这个问题吗?
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 程序集。
想法?
parsing - 如何在使用 F# FsYacc 进行解析时添加和使用自定义上下文参数?
我在 F# 应用程序中使用FsLex和FsYacc进行字符串解析。在抽象语法树 (AST) 创建期间,解析器必须决定如何创建 AST(制作不同的树、抛出异常等)。解析器行为必须依赖于几个参数。
在这里,我发现允许声明如下内容:
但我找不到如何使用这种结构,并且在项目编译期间,“fsyacc.exe”以代码 1 退出。”错误
问题是:在使用 FsYacc 解析期间是否可能以及如何使用上下文参数?
我尝试过的示例:
我期望使用这样的东西:
提前致谢
更新以下异常并在 fsycc.exe 执行期间生成调用堆栈:
parsing - 在 F# 中同时进行词法分析和解析
在使用 fslex 和 fsycc 时,是否有一种简单的方法可以让词法分析和解析同时运行?
parsing - 我可以将参数传递给我的 fsyacc 解析器吗?
我知道可以将参数传递给词法分析器:
但我无法以类似的方式定义我的解析器开始符号。
我试图这样定义它:(感谢这个问题)
但是我必须像这样定义每个非终端符号,它们都会返回 lambdas。不过,这不是我想要实现的目标,我希望能够scope
在几个非终端中访问参数并在解析期间执行它们的操作。
我注意到IParseStateParserLocalStore
类型中有一个,它只包含(仅通过调试检查)。由于我可以通过每个非终端访问它,我是否可以在其中存储参数,或者这是一个坏主意?LexBuffer
parseState
我曾考虑在解析器的头部使用可变变量,但它们将是静态的(我认为?),这将阻止我同时解析多个输入......
编辑:
目前我将scope
参数存储在特定的令牌中:
我传递scope
给 Lexer,他在创建相关标记时将其嵌入到相关标记中......我真的不喜欢这个解决方案,但我无法想出更好的东西。
f# - F# 整数文件指令
我一直在使用 fslex 和 fsyacc,并且 F# 源文件(.fs
它们从 lexer ( .fsl
) 和 parser ( .fsp
) 规则生成)在所有地方都引用了原始文件.fsl
(有时是同一个.fs
源文件),并带有这样的语句(数字是行号):
此外,由.fs
生成的文件pars.fsp
做同样的事情,但额外引用了.fsi
与它一起生成的 F# 签名文件 ( )。这些是什么/意味着什么?