问题标签 [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.
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
有任何想法吗?谢谢!
bnfc - 如何在 BNFC 中为十六进制整数编写语法?
这是十六进制整数的小语法。
但是,它无法解析“0xff”,因为词法分析器将“ff”视为单个标记。我该如何解决?
bnfc - 如何正确使用不需要括号的强制转换?
为什么以下语法无法识别nat -> nat
但可以识别(nat -> nat)
,我该如何解决?
c++ - 为 C++ 程序编写 BNFC 语法
所以我正在使用BNF-Convertor (BNFC)编写语法来解析 c++ 程序。c++程序如下。
我为此写的BNF语法如下。
::
我已经为这里的左移运算符<<
和右移运算符编写了规则,>>
但由于某种原因,它没有正确解析。我究竟做错了什么?
据我了解,这应该可以工作,但会出现此错误。
grammar - BNFC 简单生产规则的解析问题
这是我的 BNFC 格式语法的简化版本:
对于此语法happy
,生成 1 个未使用的规则和 1 个移位/减少冲突警告。我在这里面临的问题是我无法正确解析函数返回类型。闻起来超级简单,但我被卡住了。
更具体地说,我int foo(int x) {return;}
在void foo(int x) {return;}
解析成功时得到解析错误。因此,这三个规则似乎无法按预期协同工作:
如果我将FunDef
规则更改为FunDef ::= Type Id "(" [ Arg ] ")" FunBody;
解析顺利,但我想保留Type
和FunType
区分,以免成为void
常规的Type
.
grammar - LBNF/BNFC 语法中的可选前缀,没有移位/减少冲突
我正在尝试为类 C 语言编写 LBNF/BNFC 语法。在 C 语言中,有许多可能的修饰符,您可能会或可能不会在声明前写入(如inline
、const
等volatile
)。
我正在尝试编写语法以重用代码并使生成的 Haskell AST 易于使用。类型的语法可能如下所示:
对于函数声明,它可能如下所示:
问题是由于这些可选前缀,我得到了大量的移位/减少,有时甚至减少/减少冲突。避免这些冲突的替代语法可能如下所示:
或者
这导致了这样的 Haskell AST:
而不是更吸引人
您可以看到这如何迅速导致规则组合爆炸或使用不愉快的 Haskell AST。
我怎样才能最好地避免这些冲突?
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 中解决它。
c++ - 共享指针时删除指针向量的父级是否安全?
我正在经历并尝试修复的一个应用程序中出现内存泄漏问题。我怀疑的问题之一是我使用 BNFC 将文件中的行解析为命令:
以供参考:
BNFC 用这些指针构造它们,new
然后返回指针。delete lineCmds
不删除 持有的值是否安全cmdShared
?
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;
应该允许它通过?为什么不是这样?