我有这个项目,我希望使用bison
与多个flex
扫描程序一起进行解析。我想要解析的语言包含特定的标记对,这些标记定义了应该以不同方式解析的文本区域。问题是这个区域定义了一些与父语言不同的令牌,所以它不能用一台扫描仪真正扫描,我想避免使用多个野牛解析器,如果可能的话,但是我会我真的很想。
所以我到目前为止所做的一切。我创建了两个具有两个不同前缀的可重入flex
扫描程序,让我们说aa
和bb
。使用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。任何帮助表示赞赏。