算术表达式递归下降解析器C++实现
递归下降的算术表达式,写起来不算难,但想写得清晰、鲁棒,还真得动点脑筋。这个用 C++写的小项目就挺合适练手的,文法清楚,逻辑分明,代码结构也不复杂。
算术表达式的文法是经典的 E → E + T | T,再往下是 T → T * F | F 和 F → (E) | i,也就是说支持括号、加法、乘法和整数。用 parseE()
、parseT()
、parseF()
三个函数分层,思路清晰,代码也不难读。
写这个递归下降器,前提是你得先搞个词法器。像 +
、*
、()
还有 i
这样的都要先拆成 token,不然解析就像瞎子摸象。你可以用 std::stringstream
读入字符串,一个个符号。
语法错误这块,推荐写点友好的提示,比如丢了括号、操作符不对,最好能定位位置。简单粗暴一点就 throw
异常,优雅点可以返回错误码或者打印错误信息。
测试也关键,尤其是边界情况。比如 i+i*
、(i+i
这些要能识别出错;(i+i)*i
、i+i*i
要能正确通过。项目里还带了个 0705010201 陈金红.doc
的文档,有空可以翻翻,思路和测试案例都有。
如果你正在啃编译原理,又想上手写点能跑的代码,这个项目真挺合适的。小而精,不走弯路,学完再去扩展支持除法、括号优先级,都是水到渠成的事。
递归下降分析程序.rar
预估大小:1个文件
0705010201陈金红.doc
141KB
91.01KB
文件大小:
评论区