作为一个宠物项目,我正在尝试用Jison(一个Bison的JavaScript克隆)制作一个groff解析器,但是我正在努力弄清楚groff的语法是否是LALR(1)
有没有人对此有所了解?。
提前致谢。
更新1
回应Brian关注的问题,以下是有关我的问题的详细信息:
Groff是用C ++编写的,不使用Bison,我自己就是在推导语法。
我上传了所有进度here
答案 0 :(得分:2)
解析troff的大部分工作都是词法,尽管你可以利用解析器来评估算术表达式。 “语法”只是一个识别控制线并将它们分成参数的问题(再次,基本上是词汇)。
如果您打算实现修改控制和转义字符(.cc
,.c2
,.ec
和.eo
)的控件,那么您将找到预编译的正则表达式虽然控制字符的解决方法并不糟糕,但是很尴尬。
我认为我倾向于将jison的使用限制在像算术表达式这样的语言中。
当然,对于像eqn
这样的预处理器来说,jison会派上用场,以防万一你的计划。
答案 1 :(得分:1)
正如@nci所说,大多数解析工作只是词汇;除了表达式(可能还有宏/转换),请求/转义语言本身可能是LL(1);几乎可以肯定,jison / bison可以胜任这项任务,实际上可能有点过分。
到目前为止,根据您的代码,您看起来像是专门为联机帮助页实现解析器,而不是一般的troff输入。如果是这样,那将简化您需要处理的内容;联机帮助页通常不使用条件逻辑或宏(尽管man宏本身可能)。