算术表达式递归下降解析器C++实现

递归下降的算术表达式,写起来不算难,但想写得清晰、鲁棒,还真得动点脑筋。这个用 C++写的小项目就挺合适练手的,文法清楚,逻辑分明,代码结构也不复杂。

算术表达式的文法是经典的 E → E + T | T,再往下是 T → T * F | FF → (E) | i,也就是说支持括号、加法、乘法和整数。用 parseE()parseT()parseF() 三个函数分层,思路清晰,代码也不难读。

写这个递归下降器,前提是你得先搞个词法器。像 +*() 还有 i 这样的都要先拆成 token,不然解析就像瞎子摸象。你可以用 std::stringstream 读入字符串,一个个符号。

语法错误这块,推荐写点友好的提示,比如丢了括号、操作符不对,最好能定位位置。简单粗暴一点就 throw 异常,优雅点可以返回错误码或者打印错误信息。

测试也关键,尤其是边界情况。比如 i+i*(i+i 这些要能识别出错;(i+i)*ii+i*i 要能正确通过。项目里还带了个 0705010201 陈金红.doc 的文档,有空可以翻翻,思路和测试案例都有。

如果你正在啃编译原理,又想上手写点能跑的代码,这个项目真挺合适的。小而精,不走弯路,学完再去扩展支持除法、括号优先级,都是水到渠成的事。

rar
递归下降分析程序.rar 预估大小:1个文件
file
0705010201陈金红.doc 141KB
rar 文件大小:91.01KB