问题标签 [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 回答
477 浏览

haskell - BNFC 安装错误

我正在尝试在我的 Mac(运行 OS Sierra)上安装 BNFC。我已经安装了 Haskell Platform for Mac (v.8.0.1) 我已经安装了 cabal 然后用它来安装 alex (v 3.2.1) 和 happy (v 1.19.5)。然后我运行了 cabal install bnfc 并且安装正确。问题是只要我输入 bnfc 或尝试使用我得到的任何 bnfc 命令:

-bash:bnfc:找不到命令

我在这里缺少什么吗?当我再次尝试安装 BNFC 时,我得到:

所有请求的软件包都已安装:BNFC-2.8.1

有任何想法吗?谢谢!

0 投票
2 回答
81 浏览

bnfc - 如何在 BNFC 中为十六进制整数编写语法?

这是十六进制整数的小语法。

但是,它无法解析“0xff”,因为词法分析器将“ff”视为单个标记。我该如何解决?

0 投票
1 回答
220 浏览

grammar - 尝试将 VHDL BNF 转换为 BNFC 的标记 BNF

我正在尝试将此处定义的 VHDL BNF 转换为标记的 BNF 以与BNFC一起使用

运行后bnfc vhdl93-bnf.cf的结果是:

我不确定错误是什么。我已经阅读了 BNFC 和 LBNF 报告的文档,但我一定错过了一些东西。

这是我到目前为止所拥有的:

0 投票
1 回答
40 浏览

bnfc - 如何正确使用不需要括号的强制转换?

为什么以下语法无法识别nat -> nat但可以识别(nat -> nat),我该如何解决?

0 投票
1 回答
1069 浏览

c++ - 为 C++ 程序编写 BNFC 语法

所以我正在使用BNF-Convertor (BNFC)编写语法来解析 c++ 程序。c++程序如下。

我为此写的BNF语法如下。

::我已经为这里的左移运算符<<和右移运算符编写了规则,>>但由于某种原因,它没有正确解析。我究竟做错了什么?

据我了解,这应该可以工作,但会出现此错误。

0 投票
1 回答
65 浏览

grammar - BNFC 简单生产规则的解析问题

这是我的 BNFC 格式语法的简化版本:

对于此语法happy,生成 1 个未使用的规则和 1 个移位/减少冲突警告。我在这里面临的问题是我无法正确解析函数返回类型。闻起来超级简单,但我被卡住了。

更具体地说,我int foo(int x) {return;}void foo(int x) {return;}解析成功时得到解析错误。因此,这三个规则似乎无法按预期协同工作:

如果我将FunDef规则更改为FunDef ::= Type Id "(" [ Arg ] ")" FunBody;解析顺利,但我想保留TypeFunType区分,以免成为void常规的Type.

0 投票
1 回答
203 浏览

grammar - LBNF/BNFC 语法中的可选前缀,没有移位/减少冲突

我正在尝试为类 C 语言编写 LBNF/BNFC 语法。在 C 语言中,有许多可能的修饰符,您可能会或可能不会在声明前写入(如inlineconstvolatile)。

我正在尝试编写语法以重用代码并使生成的 Haskell AST 易于使用。类型的语法可能如下所示:

对于函数声明,它可能如下所示:

问题是由于这些可选前缀,我得到了大量的移位/减少,有时甚至减少/减少冲突。避免这些冲突的替代语法可能如下所示:

或者

这导致了这样的 Haskell AST:

而不是更吸引人

您可以看到这如何迅速导致规则组合爆炸或使用不愉快的 Haskell AST。

我怎样才能最好地避免这些冲突?

0 投票
0 回答
90 浏览

parsing - 解决 BNFC 中的“lexer hack”/“typedef-name: identifier”问题

我正在尝试使用 BNFC 解析 CPP,但遇到了“typedef-name: identifier”问题(https://en.wikipedia.org/wiki/The_lexer_hack)。

这是 BNFC 的规范:https ://bnfc.readthedocs.io/en/latest/ 。

当在程序中定义新类型(在 C 中使用typedef)并且需要将其作为类型进行词法分析以供解析器正确处理时,就会出现问题,但词法分析阶段已经发生。其他系统有解决这个问题的方法,但我不确定如何在 BNFC 中解决它。

0 投票
1 回答
81 浏览

c++ - 共享指针时删除指针向量的父级是否安全?

我正在经历并尝试修复的一个应用程序中出现内存泄漏问题。我怀疑的问题之一是我使用 BNFC 将文件中的行解析为命令:

以供参考:

BNFC 用这些指针构造它们,new然后返回指针。delete lineCmds不删除 持有的值是否安全cmdShared

0 投票
2 回答
121 浏览

syntax - 使用 BNFC 确定命题逻辑的基本语言(语法错误)

我想使用 BNFC 解析命题逻辑中的句子。我编写了以下 BNF 语法来促进这一点:

但是,通过这种结构,我得到以下错误:

我提供的规范在语法上是不正确的?

编辑 1

好的,所以看起来bnfc真的不喜欢使用|联合符号的想法。如果不通过联合,我如何将多个产品分配给单个规则?我不想定义Atom1. L ::= Ident ;Atom2. L ::= N ;等等,但是如果我想让它起作用,这是否必要?

编辑 2

好的,所以给每个产品不同的标签L,如

允许文件logic.cf通过bnfc而没有任何错误。但是,当使用命令编译文件时

然后我尝试运行make,当 Make 尝试gcc在 bnfc 生成的文件上运行时出现以下错误Printer.c

我不知道这是什么意思。为什么要查找atom_,当我没有在 中指定这样的事情时,logic.cf如果有任何人对 的内部有更丰富的经验bnfc,我不介意收到你的来信。

编辑 3

好的,所以将标签写为

莫名其妙地被允许make通过。但是,我的解析器并不能完全正常工作,就像这样简单

返回

不是p一个有效的标识符,所以生产Atom. L ::= Ident;应该允许它通过?为什么不是这样?