2015-11-06 62 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宏本身可能)。