问题标签 [bnfc]

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

c++ - 如何在 BNFC 中进行正确的错误处理?(C++、Flex、野牛)

我正在 BNFC 中制作一个编译器,它已经到了一个已经编译了一些东西并且代码可以在我的设备上运行的阶段。但在发布之前,我希望我的编译器在用户尝试编译无效程序时返回正确的错误消息。

我发现野牛如何在 stderr 流上写入错误并且我能够捕捉到这些错误。现在假设用户的代码没有语法错误,它只是引用了一个未定义的变量,我可以在我的访问者中捕捉到这个,但我不知道行号是什么,我怎样才能找到行号?

0 投票
2 回答
106 浏览

bnf - 解析 BNFC 文件时出现“非详尽模式以防万一”错误

我正进入(状态

错误。这是什么意思?

它并没有真正说明我的 BNF 语法出了什么问题,我也不知道如何找到错误。前几天一直在找,没有成功。

我检查了文件中是否定义了每个符号,我修复了一些规则,没有任何帮助。

0 投票
1 回答
540 浏览

parsing - 为什么用 BNFC 解析这个程序会失败?

给定以下语法:

使用 bnfc 创建的解析器无法解析

虽然它解析

或者

我认为解析器看到 Ident 并且不知道它是声明还是声明、LR 的东西等可能是一个问题(仍然一个lookeahed 的标记就足够了??)。但是我在 BNFC 文档中找不到任何说明它不适用于所有语法的注释。

任何想法如何让这个工作?

0 投票
1 回答
425 浏览

grammar - BNFC 定义布尔令牌

我正在尝试使用 BNF 转换器编写解析器。我正在使用的语法允许使用a ::= trueand之类的东西b ::= false。所以我正在尝试创建一个令牌来实现这一点。这是我到目前为止所拥有的:

我希望像这样使用它:

当我尝试运行 BNFC 时,出现以下错误:

0 投票
1 回答
253 浏览

compiler-construction - 规则中的 BNFC 不良强制

我正在尝试使用 BNFC 编写编译器。我将使用 BNFC 生成抽象语法树。但是我遇到了错误,我似乎无法弄清楚为什么。似乎没有太多关于它的文档。

以下是我得到的错误:

这是 BNFC 文件的示例:

似乎是我_.错误地使用了标签。但是该手册只有一两行描述它的用途。我在这里做错了什么?

0 投票
1 回答
774 浏览

c# - C# 中的解析器和打印 AST

我正在 C# 中为复杂的语法实现 AST(抽象语法树),但是,为了使这个问题变得简单,我将使用非常简单的语法。

考虑这个语法:

我已经使用了 bnfc 并生成了解析器/词法分析器,并且达到了可以解析一段代码并可以打印解析树的地步。现在我想将它映射到 AST,并打印抽象语法树。是我到目前为止在示例项目中所做的。

但是,目前当我测试程序时,我的 AST 返回为 NULL。

这里,ast 为空。有 C# 经验的人可以帮助我走上正轨吗?

0 投票
1 回答
272 浏览

haskell - 在 Cabal (Haskell) 中连接构建工具

我试图使用bnfc工具为我生成一堆文件,比如词法分析器、解析器等。这工作正常。现在我想通过不必手动编译bnfc文件并让它生成一些使我的/src文件夹混乱的文件来稍微清理一下。

build-tools我尝试了 Cabal 机制,在该机制中,您在文件的字段中列出了工具,.cabal并提及您希望由extra-source-files字段生成的文件。这对我来说对 Alex 和 Happy 有用,因为它们被 Cabal 认可为构建工具,但事实bnfc并非如此。有没有一种方法可以让我bnfc与 Cabal 连接或使用任何工具,并让 Cabal 将它们识别为构建工具?

0 投票
1 回答
126 浏览

language-agnostic - BNFC 生成的语法在最简单的示例上失败

我想用haskell为一种简单的命令式语言编写一个解释器。为此,我首先为工具 BNFC ( http://bnfc.digitalgrammars.com/ ) 编写了该语言的语法。

该语法的一部分专用于算术表达式,例如:

有了这个,我可以运行 BNFC 工具并通过提供的脚本对其进行测试。它成功地解析算术运算。

但是,如果我添加另一个部分(比如说类型):

然后放 expr 部分,算术运算不再解析(在 1 + 2 上测试时,它说“解析失败...... [这里的一些标记] 1 + 2 之前的第 1 行的语法错误”)

为什么会这样?如何解决?

改写:

为什么这样的语法:

1 + 1使用 bnfc无法正确解析?

0 投票
1 回答
170 浏览

c++ - LBNF,C函数声明/定义,减少reduce冲突

我试图在 LBNF 中表示 C/C++ 函数声明具有以下(近似)形式(<sym>表示可选性,并且 [rule] 是一个零个或多个列表):

虽然函数定义具有以下形式:

目前,我有以下 LBNF:

这会导致按预期减少/减少冲突。有没有办法在解析器/词法分析器中解决这个问题?

我可以用以下语法解决它:

然后在类型检查器中检查函数定义是否具有每个参数的标识符,但这感觉不太令人满意......

这通常在像 C 这样的语言中是如何处理的?

0 投票
1 回答
64 浏览

java - bnfc漂亮的打印机java错误

我有这个 BNFC 文件描述了一个由许多部分组成的配置文件,其中每个部分的名称在 [] 之间,后跟一个简单声明列表

例子:

具有未定义数量的部分和声明。

我从 shell 运行了命令bnfc -m -java <filename>,一切都很好,部分来自漂亮的打印机。当编译 prettyprinter.java 时会产生大量错误。例如:

所有的错误都属于这种类型。我想知道,我刚刚建立了语法,我的语法失败了还是 BNFC 失败了?谢谢