簡體   English   中英

處理一元運算符的后綴算法的中綴

[英]Infix to postfix algorithm that takes care of unary operators

算法的 I/p 將是這樣的表達式:

a+(-b)
a*-b+c

即標准 C 編譯器支持的任何表達式。

現在我已經將輸入格式化為令牌流,令牌包含信息,無論是運算符還是操作數。 算法應該考慮到這一點,並給我一個我可以評估的后綴表達式。

如果我使用標准轉換算法,則無法區分一元運算和二元運算 就像 a*(-b) 會給我 ab-* ,這會以錯誤的方式進行評估。

如果運算符是表達式中的第一件事,或者跟在另一個運算符之后,或者跟在左括號之后,那么它就是一元運算符。

您必須在輸出字符串中為一元運算符使用另一個符號,否則無法區分后綴表示法中的二元和一元變體。

在您的輸入中,當您有 2 個連續的運算符時,第二個運算符將是一元的。 如果您有更多的連續運算符,除第一個之外的所有運算符都是一元運算符。

將所有一元-運算符轉換為操作數-1和運算符* ,並刪除所有一元+運算符。

如果第一個元素是運算符,則它是一元運算符。

括號是一種特殊情況,但您可以先忽略它們。 在以下示例中-*連續。

4*(-(5))

你的代幣將變成:

4
*
(
-1
*
(
5
)
)

您可以簡單地將-6轉換為06-以完全消除一元運算符。 我喜歡這種方法,因為它更正交,並且在處理時不需要處理特殊情況。

另一種方法是對使用相同符號的運算符的一元和二進制版本使用不同的符號,例如。 -仍然是二進制減號,而~成為否定符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM