groff 的文法是 LALR(1) 吗?

Is groff's grammar LALR(1)?

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

有人对此有见解吗?

提前致谢。

更新 1

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

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

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

我想我倾向于将 jison 的使用限制在语言的某些部分,例如算术表达式。

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

正如@nci 所说,大部分解析工作只是词法;除了表达式(可能还有 macros/diversions),request/escape 语言本身可能是 LL(1); jison/bison 几乎肯定能胜任这项任务,事实上,可能有点矫枉过正。

根据您目前的代码,您似乎是专门为联机帮助页而不是为一般的 troff 输入实现解析器。如果是这样,那将简化您需要处理的事情;联机帮助页通常不使用条件逻辑或宏(尽管 man 宏本身可能)。