问题标签 [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 投票
2 回答
270 浏览

f# - 以下 ocamlyacc 代码的 fsyacc 等效项是什么?

我正在开发一个使用 F# 的玩具编译器,即 FsLex 和 FsYacc 的组合。为了熟悉它们,我阅读了 Expert F# (v2) 书的 Lexer/Parser 章节(顺便说一句,一本好书)。现在,我已经完成了推荐的 ocamlyacc 教程的一半,并停留在最后一个示例多功能计算器mfcalc 上。特别是下面的语句

在解析器文件中不断收到错误“错误:解析错误”在我的F# 版本中。我在这里遗漏了什么,或者这是 F# 目前不支持的功能吗?

0 投票
1 回答
1576 浏览

c# - c -> c# 翻译、工具

我想将 C 应用程序翻译成 .Net 并思考如何自动化任务。我不需要“解析”和编译 C 文件,而是想重新创建项目结构,创建与 C 文件对应的 .Net 类等。看看 YACC/LEX 工具和其他解析器是否有意义发电机?如果我能够从 C 代码创建 AST,也许我可以从中获得 C# 代码?

0 投票
1 回答
317 浏览

f# - Fsyacc:已添加具有相同密钥的项目

我开始玩 Fslex/Fsyacc。尝试使用此输入生成解析器时

解析器.fsy:

Ast.fs

Fsycc 报告以下错误:“FSYACC:错误 FSY000:已添加具有相同键的项目。”

我相信问题出在生产中AssignmentList,但找不到解决方法...

任何提示将不胜感激

0 投票
2 回答
802 浏览

f# - 用一元减号扩展 Fsyacc 的示例语法

我试图扩展作为“F# Parsed Language Starter”一部分的示例语法以支持一元减号(对于像 2 * -5 这样的表达式)。

我在这里碰到了像 Samsdram 这样的街区

基本上,我扩展了 .fsy 文件的标题以包含如下优先级:

然后语法规则如下:

另外,AST的定义:

但是在尝试解析上述表达式时仍然会出现解析器错误。

任何想法缺少什么?我阅读了 F# 编译器的源代码,不清楚他们是如何解决这个问题的,看起来很相似

编辑

优先级以这种方式排序:

0 投票
1 回答
209 浏览

f# - fsyacc:允许用语言定义运算符

fsyacc 是否有某种方法来处理在解析时引入的运算符?我正在尝试为 Kaleidoscope 构建一个解析器,它是一种玩具语言,用作LLVM 教程的示例。Kaleidoscope 允许定义运算符以及优先级。例如:

0 投票
1 回答
135 浏览

parsing - 是否可以使用为一种语言开发的 FsYacc 解析器作为其他语言解析过程的一部分?

我正在为两种语言 L1 和 L2 实现解析和表达式评估。重要的是 L1 可以作为单独的语言使用,也可以作为 L2 的一部分使用,而 L2 只包含几个关键字,而 L1 中没有这些关键字。

我已经完成了Lexing -> Parsing -> AST production -> L1 的 AST 处理过程,并用于此 F# 和FsLexFsYacc实用程序。

在解析另一种语言 L2 期间是否可以使用已经开发的解析过程(我的意思是令牌,在 L1 解析器中定义的AST 生成)?

AST:L1 的 AST 将用作 L2 的 AST 的一部分,并且将使用相同的 AST 处理过程。

FsLex词法分析器:两种语言都可能通用,我只需要在 L1 词法分析器中包含几个 L2 的缺失关键字。但是,如果可以为 L1 和 L2 提供单独的词法分析器,并从 L2 词法分析器中引用 L1,那就太好了。

FsYacc 解析器:我不希望将所有 L1 解析器代码“复制-C”到 L2 中。 有没有一种方法可以在我的 L1 解析器中定义的 L2、令牌和 AST 数据生产中进行引用?

提前致谢

0 投票
3 回答
1100 浏览

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

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

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

0 投票
4 回答
1469 浏览

f# - F#模式匹配:如何匹配一组共享相同参数的可能类型?

我是 F# 的新手,对整个模式匹配的想法不太熟悉。我试图为我的问题寻找更好的解决方案,但我担心我什至无法正确表达问题——我希望问题标题至少有点准确。

我想要做的是从中提取 2 个“参数” listMethodlistMethod是具有字符串和Expression“参数”的几种类型之一(我怀疑参数是错误的术语):

然后我继续使用varDecl并最终使用与实际 listMethod 代码类似的匹配表达式,该代码使用了我基于varDecl.

我现在的问题是:我怎样才能使上面的代码更紧凑?

我想匹配所有具有 2 个参数(类型stringExpression)的类型而不自己列出它们,这有点难看且难以维护。

ListMethod类型声明如下(整个就是一个 FsLex/FsYacc 项目):

(到目前为止,我只有 form 的类型string * Expr,但这会改变)。

我认为对于任何有经验的人来说,这都是一个相当愚蠢的问题,但正如我所说,我是 F# 的新手,自己找不到解决方案。

提前致谢!

编辑: 我真的很想避免列出所有可能的类型listMethod两次。如果我无法在match表达式中使用通配符或占位符,也许我可以修改listMethod类型以使事情更清晰。

想到的一个选项是只创建一种类型,listMethod并为具体类型创建第三个参数(Select、Where、Sum)。还是有更好的方法?

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 投票
1 回答
741 浏览

f# - 使用 FSyacc 解析期间的有意义的错误

我正在使用 F# Power Pack 中的 fsyacc/fslex 来解析一些源代码。

为了检测错误,我使用以下代码:

但是当这段代码在解析多行源文件时抛出错误消息时,我得到了错误的行和列位置:

如何正确获取发生错误的行号?