如何用最新Boost Spirit将代码定义文本解析为XML结构?
Boost Spirit 入门指导请求:自定义语法解析转XML
背景
我是Web开发转C++的新手,第一次使用Boost Spirit,需要完成团队任务:将其他团队编写的代码定义文本转换为XML格式,方便集成团队基于XML生成多语言代码。
输入示例(代码定义文本)
Class Simple caption; Class Simple columns "Column Name"; Class Container CONTAINER_NAME ( Complex OBJECT_NAME ( Simple obj_id Simple obj_property1 Simple obj_attribute enumeration(EnumOption1, EnumOption2,EnumOption3,EnumOption4) Container OBJECT_ITEMS ( Complex OBJECT_ITEM ( Simple obj_item_name Container set_value ( Simple obj_item_value ) ) ) ) );
期望输出XML结构
<task> <class> <simple> <identifier>caption</identifier> <literal>" "</literal> </simple> </class> <class> <simple> <identifier>caption</identifier> <literal>"Column Name"</literal> </simple> </class> <class> <container> <identifier>CONTAINER_NAME:CONTAINER_NAME</identifier> <literal>" "</literal> <complex> <identifier>CONTAINER_NAME:OBJECT_NAME</identifier> <literal>" "</literal> <simple> <identifier>CONTAINER_NAME:obj_id</identifier> <literal>" "</literal> </simple> <simple> <identifier>CONTAINER_NAME:obj_property1</identifier> <literal>" "</literal> </simple> <simple> <identifier>CONTAINER_NAME:obj_attribute</identifier> <literal>" "</literal> <enumeration> <word>EnumOption1</word> <word>EnumOption2</word> <word>EnumOption3</word> <word>EnumOption4</word> </enumeration> </simple> <container> <identifier>CONTAINER_NAME:OBJECT_ITEMS</identifier> <literal>" "</literal> <complex> <identifier>CONTAINER_NAME:OBJECT_ITEM</identifier> <literal>" "</literal> <simple> <identifier>CONTAINER_NAME:obj_item_name</identifier> <literal>" "</literal> </simple> <container> <identifier>CONTAINER_NAME:set_value</identifier> <literal>" "</literal> <simple> <identifier>CONTAINER_NAME:obj_item_value</identifier> <literal>" "</literal> </simple> </container> </complex> </container> </complex> </container> </class> </task>
我的初步思路
- 定义包含Class、Container、Complex、Simple的语法规则(当前最大难点);
- 编写语义动作/函数创建XML节点,考虑使用msxml6.dll但不知道如何对接;
- 看过构建AST再生成XML的示例,但不符合需求的嵌套结构。
补充语法规则
- 分号表示CLASS块结束;
- 注释单独成行,无行内注释;
- literal内容在双引号中,代码定义文本里没有
<literal>标签。
请求帮助
希望能提供入门指导、代码示例或相关解决方案。
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

