2015-11-06 35 views
0

作为一个宠物项目,我试图用Jison(一个Bison的JavaScript克隆)制作groff解析器,但是我努力想弄明白groff的语法是否为LALR(1),我正在努力研究。groff的语法LALR(1)?

有没有人对此有所了解?

在此先感谢。

更新1

针对布莱恩担心,这里是我的问题的详细信息:

  • Groff还用C++编写,并且不使用野牛,我得出的语法我。

  • 我已经上传了我的一切进步here

+0

我认为你需要向我们提供更多的信息。你有没有groff的语法来源,或者你是自己推导出来的吗?如果你正在创作,到目前为止你有什么?你能否详细解释你所遇到的问题,然后或许我们可以提供帮助。没有人去上班了这一点划伤你...... –

+0

嘿@ BrianTompsett-汤莱恩,绝对我不要求一个解决方案,我试图找到一个指南知道是有道理的与野牛解析groff。 – roperzh

回答

2

大部分工作分析的troff的是词汇,虽然你可以使用一个解析器来评价算术表达式。 “语法”在其他方面只是确定控制线并将它们分解为参数(再次,基本上是词法)的问题。

如果要实现哪些修改控制和转义字符(.cc.c2.ec.eo)的控制,那么你会发现预编译的正则表达式来很尴尬,虽然控制字符的解决方法是不可怕的。

我想我会倾向于将jison的使用限制为像算术表达式这样的语言片断。

当然,如果您的计划中有这种情况,jison将会适用于像eqn这样的预处理器。

1

正如@nci所说,大部分解析工作只是词汇;除了表达式(可能还有宏/转移),请求/转义语言本身可能是LL(1);杰森/野牛几乎可以肯定地完成任务,事实上,可能是过度杀伤。

根据你的代码到目前为止,它看起来像你正在实现一个专门的手册页解析器,而不是一般的troff输入。如果是这样,那简化了你需要处理的事情; manpages通常不使用条件逻辑或宏(尽管man宏本身可能)。