遞迴下降語法分析

2021-06-14 09:20:06 字數 1550 閱讀 8960

看了這篇部落格之後,總算搞明白了以前編譯原理沒搞懂的ll文法的意義。下面用這種方法實現乙個簡單的計算機器程式:

其bnf正規化如下:

operator=」+」

operator=」-「

operator=」*」

operator=」/」

expression=<0,1,2,3,4,..,9>

expression= 「(」 operator expression expression 「)」

expression=「(」expression 「)」

#include #include struct expression

float result;

std::string error;

char* start;

};class lexer

;

#include "parser.h"

#include #include #include lexer::lexer(const std::string& str):cur(),size()

//獲取右邊的表示式

expression right = getexpression();

if (!right.error.empty())

switch (op) else

break;

default:

assert(false && "should never get here");

break;

}} else

}if (!match(")"))

} else

} return ret;

}expression lexer::getnumber()

++point;

ret.result = ret.result + ci;

} else

//多個數字

++cur;

getnum = true;

} else if (c == '-' && !getnum) else if (c == '.') else

} if (negative)

if (!getnum)

return ret;

}

#include #include #include "parser.h"

#pragma warning(disable:4996)

using namespace std;

int main(int argc,char* argv)

return 0;

}

測試:

(* (+ 1.003 2) (+ 3 -4) )

(/ (+ 5 6) (- b3 5) )

(+ 3 5 )

輸出:-3.003

發生錯誤:

位置: b3 5) )

資訊: 此處出現未知字元

8

改進

遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...

遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...

遞迴下降語法分析實驗

通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...