☰
C++ BNF语法解析
2026/11/2 6:09:03 网站建设 项目流程

https://github.com/r35382/bnflite

#include "bnflite/bnflite.h" #include <iostream> typedef bnf::Interface<double> Calc; /* pass number result */ Calc DoNumber(std::vector<Calc>& res) { char* lst; double value = strtod(res[0].text, &lst); // formaly it is not correct for not 0-terminated strings Calc ret(value, res); if (lst - res[0].text - ret.length != 0) { std::cout << "number parse error:"; std::cout.write(ret.text, ret.length); } return ret; } int main_bnflite(int argc, char* argv[]) { //int argc1 = 3; //char* argv1[3] = { "sjijasd", "测试", "。,.,,.." }; //main_prettyprint(argc1, argv1); bnf::Token token('0', '9'); bnf::Lexem number = 6 * token; bnf::Rule positiveNum = !bnf::Token('-') | number; bnf::Bind(positiveNum, DoNumber); const char* tail = 0; typedef bnf::Interface<double> Calc; Calc result; std::string clc("123456"); int tst = bnf::Analyze(positiveNum, clc.c_str(), &tail, result); if (tst > 0) std::cout << "Result of " << clc << " = " << result.data << std::endl; else std::cout << "Parsing errors detected, status = " << std::hex << tst << std::endl << "stopped at: " << tail << std::endl; return 0; }

创作不易,小小的支持一下吧!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询