新聞中心
在C語言中,實(shí)現(xiàn)表達(dá)式求值可以通過以下步驟完成:

為連城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及連城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、連城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
1、詞法分析:將輸入的字符串分解成一個個的標(biāo)記(token),這些標(biāo)記可以是數(shù)字、運(yùn)算符、括號等。
2、語法分析:根據(jù)預(yù)先定義的語法規(guī)則,將這些標(biāo)記組合成一個抽象語法樹(AST)。
3、語義分析:遍歷這個抽象語法樹,檢查其是否符合語義規(guī)則,檢查除數(shù)是否為零,檢查括號是否正確配對等。
4、計(jì)算:遍歷這個抽象語法樹,進(jìn)行實(shí)際的計(jì)算。
以下是一個簡單的實(shí)現(xiàn),只支持加減乘除和括號,沒有考慮錯誤處理和優(yōu)化。
#include#include #include typedef struct Node { char op; struct Node* left; struct Node* right; } Node; Node* newNode(char op) { Node* node = (Node*)malloc(sizeof(Node)); node>op = op; node>left = NULL; node>right = NULL; return node; } int evaluate(Node* root) { if (root == NULL) return 0; if (root>op == '+') return evaluate(root>left) + evaluate(root>right); if (root>op == '') return evaluate(root>left) evaluate(root>right); if (root>op == '*') return evaluate(root>left) * evaluate(root>right); if (root>op == '/') return evaluate(root>left) / evaluate(root>right); return atoi(&root>op); } Node* constructTree(char* postfix) { Node* stack[strlen(postfix)]; int top = 1; for (int i = 0; i < strlen(postfix); i++) { if (isdigit(postfix[i])) { stack[++top] = newNode(postfix[i]); } else { Node* t = newNode(postfix[i]); t>right = stack[top]; t>left = stack[top]; stack[++top] = t; } } return stack[top]; } void inorder(Node* root) { if (root != NULL) { inorder(root>left); printf("%c ", root>op); inorder(root>right); } } int main() { char postfix[] = "231*+9"; Node* root = constructTree(postfix); printf("Infix expression isn"); inorder(root); printf("nEvaluation of expression is %d", evaluate(root)); return 0; }
這個程序首先將后綴表達(dá)式轉(zhuǎn)換為抽象語法樹,然后遍歷這個樹進(jìn)行計(jì)算,注意,這個程序假設(shè)輸入的后綴表達(dá)式是有效的,沒有進(jìn)行錯誤檢查。
分享文章:怎么用c語言實(shí)現(xiàn)表達(dá)式求值
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/cojddeo.html


咨詢
建站咨詢
