一个带有多个柔性扫描仪的野牛解析器

时间:2016-09-05 15:13:58

标签: bison flex-lexer

我有这个项目,我希望使用bison与多个flex扫描程序一起进行解析。我想要解析的语言包含特定的标记对,这些标记定义了应该以不同方式解析的文本区域。问题是这个区域定义了一些与父语言不同的令牌,所以它不能用一台扫描仪真正扫描,我想避免使用多个野牛解析器,如果可能的话,但是我会我真的很想。

所以我到目前为止所做的一切。我创建了两个具有两个不同前缀的可重入flex扫描程序,让我们说aabb。使用aaset_in时将这些扫描仪初始化。 bbset_in,我使用了相同的FILE*指针。在我的解析器中,我在语法的相应规则中定义了中间行为switchToBbScanner。我已经定义了自己的yylex,因此它会立即检查哪个扫描程序处于活动状态并调用aalex resp。 bblex取决于所选的扫描仪。

但每次bb扫描程序读取令牌时,我都会得到类似的内容

--(end of buffer or a NUL) --accepting rule at line 26 ("abc") --accepting rule at line 27 (" ") --accepting rule at line 23 ("=") --accepting rule at line 27 (" ") --accepting rule at line 24 ("{") Switching to BB --(end of buffer or a NUL) --EOF (start condition 0) syntax error, unexpected END, expecting HEXDIGIT

甚至可以实现这样的目标吗?我尝试调试flex生成的代码,但我正在努力理解所有的宏代码。由于最小的例子很难粘贴在这里,所以我用它做了一个回购https://github.com/metthal/so-minimal-example。任何帮助表示赞赏。

0 个答案:

没有答案