0

作为一个宠物项目,我正在尝试使用Jison(Bison 的 JavaScript 克隆)制作一个 groff 解析器,但我正在努力弄清楚 groff 的语法是否为 LALR(1)。

有没有人对此有所了解?

提前致谢。

更新 1

为了回应布赖恩的担忧,以下是有关我的问题的更多详细信息:

4

2 回答 2

2

解析 troff 的大部分工作都是词法的,尽管您可以使用解析器来评估算术表达式。否则,“语法”只是识别控制线并将它们分成参数的问题(同样,本质上是词汇)。

如果您打算实现修改控制字符和转义字符(.cc、、和)的控件.c2,那么您会发现预编译的正则表达式很笨拙,尽管控制字符的解决方法并不糟糕。.ec.eo

我想我倾向于将 jison 的使用限制在算术表达式之类的语言中。

当然,jison 对于像这样的预处理器会派上用场eqn,以防万一在您的计划中。

于 2015-11-07T02:36:38.443 回答
1

As @nci said, most of the parsing work is just lexical; other than the expressions (and possibly macros/diversions) the request/escape language itself is probably LL(1); jison/bison is almost certainly up to the task, and indeed, probably overkill.

Based on your code so far it looks like you're implementing a parser for manpages specifically, rather than for general troff input. If so, that simplifies what you need to handle; manpages generally don't use conditional logic or macros (although the man macros themselves may).

于 2015-11-08T09:44:47.643 回答