Ubuntu BYACC / BTYACC语法错误

时间:2018-06-11 09:07:57

标签: makefile yacc

我正在尝试为我的Raspberry Pi 2编译kodi的libxkbcommon库。

主机是运行Ubuntu 16.04 x64的专用服务器。

现在我尝试编译libxkbcommon时有两个错误,具体取决于我使用的yacc:

byacc:

YACC     src/xkbcomp/parser.c
yacc: e - line 219 of 
"/opt/kodi/xbmc/tools/depends/target/libxkbcommon/raspberry-pi2-release/src/xkbcomp/parser.y", syntax error
%destructor { FreeStmt((ParseCommon *) $$); }
^
Makefile:1637: recipe for target 'src/xkbcomp/parser.c' failed

btyacc:

parser.y:85: syntax error

以下是libxkbcommon的源代码:

https://github.com/xkbcommon/libxkbcommon

1 个答案:

答案 0 :(得分:2)

# READ ENTRIES FROM FILE entries = {} with open('your_file.txt', 'r') as file: for line in file: entry = line.split(':') # Allow values like abc:myvm:lx01 entries[entry[0]] = ':'.join(entry[1:]).strip() # Modify entries['hostname'] in any way you want # WRITE ENTRIES TO FILE with open('your_file.txt', 'w') as file: file.writelines('{}: {}\n'.format(*entry) for entry in entries.items()) 文件需要许多(非常有用的)野牛扩展名,因此所有yacc变种都无法处理。

  • xbcomp/parser.y不支持与bison兼容的纯解析器声明。 (它有一个不同的,不完全兼容的机制,它实现了相同的功能。)因此它在其中一个声明的第一个实例上失败。

  • 应该可以使用btyacc,但不能使用Ubuntu软件包存储库中提供的版本。虽然Ubuntu软件包存储库更改历史记录似乎表明其目的是包含允许byacc的构建选项,但%destructor存储库中当前可用的实际二进制文件是在没有该选项的情况下构建的。 (它还有几年的历史,我认为使用更新的版本会很有用。)我将此报告为launchpad bug 1776270,并提出可能的修复建议。

  • 我确定您可以使用Gnu bison构建软件,Gnu bison可以作为Ubuntu软件包byacc使用。由于这是开发人员计算机上安装的最受欢迎的yacc版本,因此很久以前可能会注意到使用bison构建失败。

如果您希望使用bison,无论出于何种原因,您必须自行下载并构建它。您可以从Thomas Dickey's byacc page获取最新版本,然后使用常规过程构建它:untar,configure,make,make install。当我测试这个时,我使用了以下配置行:

byacc

只有第一个选项是强制性的

./configure --enable-btyacc  --program-prefix=b  --prefix=/usr