问题标签 [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.
c# - c -> c# 翻译、工具
我想将 C 应用程序翻译成 .Net 并思考如何自动化任务。我不需要“解析”和编译 C 文件,而是想重新创建项目结构,创建与 C 文件对应的 .Net 类等。看看 YACC/LEX 工具和其他解析器是否有意义发电机?如果我能够从 C 代码创建 AST,也许我可以从中获得 C# 代码?
f# - Fsyacc:已添加具有相同密钥的项目
我开始玩 Fslex/Fsyacc。尝试使用此输入生成解析器时
解析器.fsy:
Ast.fs
Fsycc 报告以下错误:“FSYACC:错误 FSY000:已添加具有相同键的项目。”
我相信问题出在生产中AssignmentList
,但找不到解决方法...
任何提示将不胜感激
f# - 用一元减号扩展 Fsyacc 的示例语法
我试图扩展作为“F# Parsed Language Starter”一部分的示例语法以支持一元减号(对于像 2 * -5 这样的表达式)。
我在这里碰到了像 Samsdram 这样的街区
基本上,我扩展了 .fsy 文件的标题以包含如下优先级:
然后语法规则如下:
另外,AST的定义:
但是在尝试解析上述表达式时仍然会出现解析器错误。
任何想法缺少什么?我阅读了 F# 编译器的源代码,不清楚他们是如何解决这个问题的,看起来很相似
编辑
优先级以这种方式排序:
f# - fsyacc:允许用语言定义运算符
fsyacc 是否有某种方法来处理在解析时引入的运算符?我正在尝试为 Kaleidoscope 构建一个解析器,它是一种玩具语言,用作LLVM 教程的示例。Kaleidoscope 允许定义运算符以及优先级。例如:
parsing - 是否可以使用为一种语言开发的 FsYacc 解析器作为其他语言解析过程的一部分?
我正在为两种语言 L1 和 L2 实现解析和表达式评估。重要的是 L1 可以作为单独的语言使用,也可以作为 L2 的一部分使用,而 L2 只包含几个关键字,而 L1 中没有这些关键字。
我已经完成了Lexing -> Parsing -> AST production -> L1 的 AST 处理过程,并用于此 F# 和FsLex,FsYacc实用程序。
在解析另一种语言 L2 期间是否可以使用已经开发的解析过程(我的意思是令牌,在 L1 解析器中定义的AST 生成)?
AST:L1 的 AST 将用作 L2 的 AST 的一部分,并且将使用相同的 AST 处理过程。
FsLex词法分析器:两种语言都可能通用,我只需要在 L1 词法分析器中包含几个 L2 的缺失关键字。但是,如果可以为 L1 和 L2 提供单独的词法分析器,并从 L2 词法分析器中引用 L1,那就太好了。
FsYacc 解析器:我不希望将所有 L1 解析器代码“复制-C”到 L2 中。 有没有一种方法可以在我的 L1 解析器中定义的 L2、令牌和 AST 数据生产中进行引用?
提前致谢
f# - 选择 fsycc/fslex 或 FParsec 什么?
我需要解析简单的 DSL 语言,如下所示:
解析这种语言最合适的工具是什么?
f# - F#模式匹配:如何匹配一组共享相同参数的可能类型?
我是 F# 的新手,对整个模式匹配的想法不太熟悉。我试图为我的问题寻找更好的解决方案,但我担心我什至无法正确表达问题——我希望问题标题至少有点准确。
我想要做的是从中提取 2 个“参数” listMethod
。
listMethod
是具有字符串和Expression
“参数”的几种类型之一(我怀疑参数是错误的术语):
然后我继续使用varDecl
并最终使用与实际 listMethod 代码类似的匹配表达式,该代码使用了我基于varDecl
.
我现在的问题是:我怎样才能使上面的代码更紧凑?
我想匹配所有具有 2 个参数(类型string
和Expression
)的类型而不自己列出它们,这有点难看且难以维护。
ListMethod
类型声明如下(整个就是一个 FsLex/FsYacc 项目):
(到目前为止,我只有 form 的类型string * Expr
,但这会改变)。
我认为对于任何有经验的人来说,这都是一个相当愚蠢的问题,但正如我所说,我是 F# 的新手,自己找不到解决方案。
提前致谢!
编辑: 我真的很想避免列出所有可能的类型listMethod
两次。如果我无法在match
表达式中使用通配符或占位符,也许我可以修改listMethod
类型以使事情更清晰。
想到的一个选项是只创建一种类型,listMethod
并为具体类型创建第三个参数(Select、Where、Sum)。还是有更好的方法?
f# - 我应该使用 Workflow 还是 fsYacc?
我有一个非常简单的 DSL,需要在 .Net 平台上解析。我对解析器不是很有经验,我一直在查看使用 F#(fsLex、fsYacc、FParsec)的示例。我对 F# 不是很熟悉,但对 Workflow 和 LINQ 有一些经验。
鉴于 DSL 的简单性,我可以使用 LINQ 来实现词法分析器。工作流(我将使用 V4)对实现语法很有吸引力,因为我更熟悉它,鉴于它的图形性质,它更容易向其他人解释,并且它受到 Microsoft 的支持,并且可能会继续发展。
但是,如果我的 DSL 变得更加复杂,我可以将 WF 实现想象成一个嵌套的活动地狱,并且一个基于 LINQ 的词法分析器也会以同样的方式进行。那时学习 F# 并使用其中一种 F# 工具会更有意义。
我想知道其他人是否比较了 WF 和 F# 解析工具来实现一个简单的 DSL 解释器以及可能的结论。
f# - 使用 FSyacc 解析期间的有意义的错误
我正在使用 F# Power Pack 中的 fsyacc/fslex 来解析一些源代码。
为了检测错误,我使用以下代码:
但是当这段代码在解析多行源文件时抛出错误消息时,我得到了错误的行和列位置:
如何正确获取发生错误的行号?