2015-11-18 183 views
0

比方說,我有一個像前瞻與後綴語言

3 2 result +  // equivalent to result = 3 + 2 
result 1 result + // equivalent to ++result 

後綴的語言,我應該如何實現一個遞歸下降解析器先行(我用C做這++)?

我對如何設計這樣的分析算法,因爲我不能只在第一個標記推斷指令的類型

+1

無論您想解析此語言,還是僅僅評估其語義,最好了解[面向堆棧的編程語言](https://en.wikipedia.org/wiki/Stack-oriented_programming_language)。簡而言之,您可以循環讀取令牌,決定從堆棧中彈出多少元素(零個或多個),「執行」令牌的含義以及將元素推送到堆棧(零個或多個)。分析器和解釋器都可以通過爲令牌分配適當的含義來構建。 –

回答

1

我會說你真的不需要任何先行在所有不確定的,只是當前令牌。

將當前令牌推送到堆棧,並且當您到達行尾(可能是它自己的令牌)時,您可以查看堆棧的頂部以查看操作是什麼(當然也可以將其彈出從堆棧中)。然後彈出操作所需的操作數的數量。如果在此之後在堆棧中有更多的條目,或者如果沒有足夠的操作數,那麼你有一個錯誤。

+0

謝謝!我想C++不會這樣工作嗎?我不認爲;行終止符用於在達到時從堆棧彈出參數 – Dean

+0

@Dean不,C++肯定不會像那樣工作。 :)事實上,C++是非常難以正確解析的(查看[最令人頭疼的解析問題](例如https://en.wikipedia.org/wiki/Most_vexing_parse))。 –