将Bison语法拆分为较小的语法文件

时间:2016-07-29 00:16:42

标签: parsing bison yacc

我有一个长达700行并且不断增长的Bison语法文件;我试图尽可能地将其划分,但随着我的语言增加了更多的复杂性,管理和组织所有规则变得越来越难。我试着寻找一些方法去做野牛 - 等同于#include之类的东西,这样我至少可以在文本上将它分开,但是干涸了。有没有办法让我将语法分成较小的模块,而不需要使用makefile hacks等?

3 个答案:

答案 0 :(得分:2)

Bison没有类似于C #include的设施。

在您的野牛配方中添加预处理器步骤不是“makefile hack”,imho,而是make的预期用例。

在bison文件上使用cpp有点棘手,因为他们倾向于在他们的序言中使用#define指令,但还有其他预处理器。对于一个简单的案例,您可以使用cat

答案 1 :(得分:0)

不是分割语法本身,而是通过让规则体调用函数将其压缩为大多数单行序列:

 foo : ID bar '{' whatever_list '}' { $$ = ast_node_foo($1, $2, $4); }
     ;

语法导向转换方案的细节依赖于这些函数,这些函数可以拆分为模块。

答案 2 :(得分:0)

btyacc是yacc变体,支持%include从多个文件中读取

%include bar.y   /* inserts the contents of bar.y at this point */

虽然btyacc支持所有POSIX yacc,但它只支持几个bison扩展。