2016-04-24 54 views
1

我正在實現類似於OSX默認終端模擬器的終端模擬器:Terminal.app。使用Flex/Bison作爲終端仿真器後端的解析器不是好主意嗎?

我打開與openpty終端連接,然後使用Flex來解析進入的輸入:普通文本和control sequences和Bison其中要求基於由Flex產生令牌回調(插入字符串,光標正向序列等)。

  1. 除了正常的文本標記,我已經實現了大約30個轉義序列,沒有任何突出的問題。
  2. 我做的Flex /野牛重入的,因爲我需要多個終端窗口同時工作
  3. 我做了一些解決辦法,使的Flex /野牛讀取基於我的另一個問題連續輸出:How to detect partial unfinished token and join its pieces that are obtained from two consequent portions of input?

到目前爲止,它看起來像Flex/Bison做他們的工作,但我懷疑遲早我會遇到一些事實,顯示Flex/Bison不應該被用作解析終端輸入的工具。

現在的問題是:如果使用Flex/Bison代替手寫解析器進行終端輸入,可能會導致哪些問題?性能可能是一個問題嗎?

+0

這是矯枉過正。你不需要DPDA。您可以使用NFA/DFA完成所有操作。最複雜的終端語言Inknow是3270,它只是一個大型的狀態機。 – EJP

+0

@EJP,你能否讓你的答案更加明確?這可能是矯枉過正,但到目前爲止它確實有用:我可以編寫語法而不是手寫解析器,它似乎是更簡單的方法。表現上的過度殺傷力?另外不幸的是,我現在對DPDA,NFA/DFA一無所知,所以您可以繼續擴展。謝謝。 –

+0

請想象一下,你正在和一個經驗不足的觀衆談話。 –

回答

2

縮寫,有時有幫助:

什麼@ejp的意思是,不需要在解決方案野牛,因爲只有一個辦法了來自詞法分析器的令牌可以被解釋。所提到的堆棧用於保存機器的狀態,同時查看可以解釋輸入的替代方式。

在考慮柔性(也可能是野牛)是否會是一個很好的方法,我會更關心的是你將如何解決控制問題字符可以控制序列內穿插。

延伸閱讀: