5

我創建一個解析樹將包含類似的用語來一元和二元減號

3 - 4 * 8

8 * -5

-(10 * 1)

我需要一種方法來區分一元和二元減號。我的語法現在的方式是首先到達二進制減號,但我正在考慮改變它,並添加一個包含最後一個變量的標誌變量。

例如:如果是5 - 6

的標誌是持有5,如果它認爲減和國旗是一個數字的跳躍一元和去二進制文件。

但我不知道究竟如何在C++

任何幫助將不勝感激實現這一點。

感謝

+1

你的意思的方式來區分他們爲你做的分析,還是有辦法來區分它們的解析樹?在分析樹中,它是微不足道的 - 只需要單獨的'UNARY_MINUS'和'BINARY_MINUS'運算符。如果你的意思是你解析,當你期待一個操作數,而不是一個操作符時,會發生一元減號。 –

+0

在我的解析器中,我希望區分-5和4 -5。我的下一部分將此樹的樹葉轉換爲AST樹(正在工作),但我的解析器將所有內容視爲二進制減號(4-5)。 – Dfranc3373

回答

6

實現這樣的分析器,最簡單的方法是通過Recursive Descent的方法。確保在參考點中,得到二進制減去比一元減更高的優先級,如:

E --> | E "+" E 
     | E "-" E 
     | "-" E 
     | E "*" E 
     | E "/" E 
     | E "^" E 
     | "(" E ")" 
     | v 
+0

在看了網站之後,我可能會重新編寫我的語法規則來遵循這些網站的規則,但是有一個問題是,這個語法分析器還必須能夠處理=,< , <=, >,> =和,或者不是 – Dfranc3373

+0

@ Dfranc3373有關C++的完整運算符優先級,請參閱http://en.cppreference.com/w/cpp/language/operator_precedence。 – TemplateRex

+0

非常感謝! – Dfranc3373