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

為連城等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及連城網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、連城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
1、詞法分析:將輸入的字符串分解成一個(gè)個(gè)的標(biāo)記(token),這些標(biāo)記可以是數(shù)字、運(yùn)算符、括號(hào)等。
2、語(yǔ)法分析:根據(jù)預(yù)先定義的語(yǔ)法規(guī)則,將這些標(biāo)記組合成一個(gè)抽象語(yǔ)法樹(shù)(AST)。
3、語(yǔ)義分析:遍歷這個(gè)抽象語(yǔ)法樹(shù),檢查其是否符合語(yǔ)義規(guī)則,檢查除數(shù)是否為零,檢查括號(hào)是否正確配對(duì)等。
4、計(jì)算:遍歷這個(gè)抽象語(yǔ)法樹(shù),進(jìn)行實(shí)際的計(jì)算。
以下是一個(gè)簡(jiǎn)單的實(shí)現(xiàn),只支持加減乘除和括號(hào),沒(méi)有考慮錯(cuò)誤處理和優(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; }
這個(gè)程序首先將后綴表達(dá)式轉(zhuǎn)換為抽象語(yǔ)法樹(shù),然后遍歷這個(gè)樹(shù)進(jìn)行計(jì)算,注意,這個(gè)程序假設(shè)輸入的后綴表達(dá)式是有效的,沒(méi)有進(jìn)行錯(cuò)誤檢查。
網(wǎng)站題目:怎么用c語(yǔ)言實(shí)現(xiàn)表達(dá)式求值
標(biāo)題路徑:http://www.5511xx.com/article/cojddeo.html


咨詢
建站咨詢
