我有一个读取XML文件的代码库。似乎没有文件
对于读入的标签。其中有几种类型的实体
那些是单项式和求解器。在内部,有一家工厂
Person
。每个单项都有一个参数struct和self
和
map<string, monomial>
功能。
我知道的XML令牌是read
。有一个write
定义进入工厂的名称可以通过REMEZ
找到:
const std::string name
在该文件grep
中,可以找到构造函数$ git grep REMEZ
lib/update/molecdyn/monomial/remez_rat_approx.cc: const std::string name = "REMEZ";
参数struct的功能:
remez_rat_approx.cc
在write
中有参数struct的定义:
namespace Chroma {
void read(XMLReader &xml,
const std::string &path,
RemezRatApproxEnv::Params ¶m) {
RemezRatApproxEnv::Params tmp(xml, path);
param = tmp;
}
void write(XMLWriter &xml,
const std::string &path,
const RemezRatApproxEnv::Params ¶m) {
param.writeXML(xml, path);
}
namespace RemezRatApproxEnv {
Params::Params(XMLReader &xml, const std::string &path) {
XMLReader paramtop(xml, path);
read(paramtop, "numPower", numPower);
read(paramtop, "denPower", denPower);
read(paramtop, "lowerMin", lowerMin);
read(paramtop, "upperMax", upperMax);
read(paramtop, "degree", degree);
if (paramtop.count("digitPrecision") != 0)
read(paramtop, "digitPrecision", digitPrecision);
else
digitPrecision = 50;
}
void Params::writeXML(XMLWriter &xml, const std::string &path) const {
push(xml, path);
write(xml, "ratApproxType", RemezRatApproxEnv::name);
write(xml, "numPower", numPower);
write(xml, "denPower", denPower);
write(xml, "lowerMin", lowerMin);
write(xml, "upperMax", upperMax);
write(xml, "degree", degree);
write(xml, "digitPrecision", digitPrecision);
pop(xml);
}
}
}
有效XML输入的示例如下:
remez_rat_approx.h
原则上,应该能够提取允许的标签(以及它们的C ++ 来自C ++源代码。只需用常规解析这一行 但是,表达似乎是不可能的。
还有其他并发症,因为有些实体继承了它们
参数namespace Chroma {
namespace RemezRatApproxEnv {
struct Params {
Params() {}
Params(XMLReader &in, const std::string &path);
void writeXML(XMLWriter &in, const std::string &path) const;
int numPower;
int denPower;
Real lowerMin;
Real upperMax;
int degree;
int digitPrecision;
};
class RatApprox : public RationalApprox {
public:
RatApprox(const Params &p) : params(p) {}
private:
Params params;
};
}
void read(XMLReader &xml,
const std::string &path,
RemezRatApproxEnv::Params ¶m);
void write(XMLWriter &xml,
const std::string &path,
const RemezRatApproxEnv::Params ¶ms);
}
,因此无法在匹配的头文件中找到它。也
一些参数是可选的,如下所示:
<ratApproxType>REMEZ</ratApproxType>
<lowerMin>1.0e-3</lowerMin>
<upperMax>33</upperMax>
<numPower>-1</numPower>
<denPower>4</denPower>
<degree>16</degree>
似乎我必须找到struct
或if (paramtop.count("Verbose") > 0) {
read(paramtop, "Verbose", VerboseP);
} else {
VerboseP = false;
}
和read
的所有调用
从中创建一个结构。解析C ++可能最好留给某些人
为此制作的库,也许是来自LLVM的东西?
理想情况下,提供这样的名称并获取XML标记及其C ++类型
以及可能的默认值。解析所有的问题是否可行?
用于获取由write
命名的某些权限读入XML标记的C ++代码?什么是一个很好的起点?