问题标签 [fslex]

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 投票
3 回答
2780 浏览

f# - F# fslex fsyacc 成熟的生产代码?

在阅读了一个 2 年历史的网页后,与他们的 OCamel 同行相比,它确实撕裂了 fslex/fsyacc、错误、缓慢、愚蠢等,我想知道什么是词法解析需求的最佳选择?

我以前用 C# 绑定使用过 ANTLR,但目前正在学习 F#,当我看到它带有解析器生成器时很兴奋。由于 F# 现已正式发布,微软似乎真正致力于支持和开发。你会说 fslex 和 fsyacc 对于生产代码来说值得吗?

0 投票
1 回答
167 浏览

f# - FsLex - 2 个字符串之间的差异

我有几个令牌:

PNAMEENAME- 都是字符串。

现在我想在我的词法分析器中设置 2 条规则,以匹配这些标记。

当字符串由字符 az 和可选的特殊字符 @/() 组成时,第一条规则( PNAME) 应该匹配。

ENAME当字符串由字符 az 和可选前缀 (#/.) 组成时,第二条规则( ) 应该匹配。

现在,我将如何在我的词法分析器文件中制定一条仅匹配的规则ENAME- 即使没有前缀?

如果它有任何区别,那么它的字符串后面ENAME会有一个: - 但是这个括号不应该传递给解析器......{(prefix)eName {

有什么建议么?

0 投票
3 回答
1100 浏览

f# - 选择 fsycc/fslex 或 FParsec 什么?

我需要解析简单的 DSL 语言,如下所示:

解析这种语言最合适的工具是什么?

0 投票
1 回答
437 浏览

f# - 如何处理 FsLex 中的嵌套注释

有单行和多行注释可用,就像在 C 中一样。

如何描述词法分析器忽略所有注释的规则,甚至是嵌套的,例如:

或像这些:

升级版:

这是解析嵌套注释的有效代码(感谢Sam):

0 投票
0 回答
423 浏览

f# - Fslex,二进制文件词法分析

是否有任何能力使用 Fslex 对二进制文件格式(例如 jpeg 图像)进行词法分析(不缺乏可读性),或者我应该编写自己的词法分析器/使用 fparsec 之类的东西?

0 投票
1 回答
312 浏览

f# - 我应该使用 Workflow 还是 fsYacc?

我有一个非常简单的 DSL,需要在 .Net 平台上解析。我对解析器不是很有经验,我一直在查看使用 F#(fsLex、fsYacc、FParsec)的示例。我对 F# 不是很熟悉,但对 Workflow 和 LINQ 有一些经验。

鉴于 DSL 的简单性,我可以使用 LINQ 来实现词法分析器。工作流(我将使用 V4)对实现语法很有吸引力,因为我更熟悉它,鉴于它的图形性质,它更容易向其他人解释,并且它受到 Microsoft 的支持,并且可能会继续发展。

但是,如果我的 DSL 变得更加复杂,我可以将 WF 实现想象成一个嵌套的活动地狱,并且一个基于 LINQ 的词法分析器也会以同样的方式进行。那时学习 F# 并使用其中一种 F# 工具会更有意义。

我想知道其他人是否比较了 WF 和 F# 解析工具来实现一个简单的 DSL 解释器以及可能的结论。

0 投票
3 回答
1493 浏览

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

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

而这个制作

连同这些词法分析器规则

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

更新

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

以下规则先于STRING

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

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 回答
1300 浏览

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

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