c ++部分方法代码重用

时间:2017-12-01 16:04:08

标签: c++ json parsing code-reuse

作为更广泛项目的一部分,我在c ++中编写了一个Json类,它能够在树形层次结构中解析和存储json文档结构。 该类使用词法分析器来标记json文本源文件和一组简单的解析方法来构建json树。然后可以使用经典树遍历算法浏览已解析的json,必要时进行修改,最后将其重写为json文本文件。

我现在正在寻找一种方法来重用解析方法集来在扫描输入Json文件时执行不同的操作。例如,我希望能够创建Json指针集,而不是构建Json树。在同一个班级内。

由于我花了一段时间来调试解析算法,我一直在寻找一种方法来重用解析方法,同时更改在找到特定令牌时要执行的操作。

作为一个例子,当解析器到达一个标识标识与关键Json元素相关的标量值(string,number,true,false,null)的标记时,我希望能够创建并附加一个叶树节点到json树,或者计算json指针字符串,该字符串标识Json文档中的特定键,而不复制解析代码或插入一系列“if then else”或“switch”语句。

以下是其中一种解析方法的代码:parse_value()

template void JSONDoc::parse_value(void){

  string trimmedsymvalue;
  trimmedsymvalue=SYMVALUE;

  if(trimmedsymvalue.size() >= 2 && SYM != "NUMBER" && SYM != "NULL")
        trimmedsymvalue = trimmedsymvalue.substr(1, trimmedsymvalue.size() - 2);    

    if(SYM == "STRING"){
        CREATE_LEAF_NODE(JSONNode::NODE_STRING,trimmedsymvalue);
        return;
    }

// .....

    if(SYM == "LCBRKT"){
        parse_object();
        return;
    }

    if(SYM == "LSBRKT"){
        parse_array();
        return;
    }
}

在上面的方法中,对CREATE_LEAF_NODE(JSONNode :: NODE_STRING,trimmedsymvalue)的调用为json树创建了一个叶节点。 为了能够计算Json指针而不是将叶子附加到Json树,在代码中的这一点,我将不得不添加“if then else”或“switch”语句。

在这种特殊情况下,添加不会显着影响代码可读性,但在解析阶段构建json树所需的操作可能会更复杂,并且添加“if then else”或“switch”语句将导致一个不易维护的代码。

实现这一点是否有意义而不会混淆或复制大部分代码?

F。

0 个答案:

没有答案