解析与C ++类似的东西

时间:2012-04-03 22:16:20

标签: c++ parsing

我想解析一个语法类似于c ++ source的输入文件。该文件将包含以下组件:

//It will have comments.
//It will be able to recursively open other files.
include OtherInputFile.txt
//It will resolve scope
ObjectName::MemberVariable = 0.0;
OtherObjectName
{
  MemberVariable1 = 1.0;
  MemberVariable2 = 2.0;
}

麻烦的是,我不知道我在做什么。我想我需要的是一本关于解析的教科书章节,以指导自己使用哪些技术或算法。

2 个答案:

答案 0 :(得分:3)

有许多工具可用于构建解析器:

答案 1 :(得分:0)

  

我想解析一个语法类似于c ++ source

的输入文件

祈祷它没有模板,预处理器,运算符重载和多重继承。否则你就麻烦了。

  

我不知道我在做什么

调查Lex / Yacc。阅读有关解析的书或谷歌主题("如何制作语言")。其中一些工具有教程和文档链接。我可以发誓我看过野牛或者yacc或lexx教程,这些教程曾经提到了被称为#34的书,如何编写编译器"或类似的东西,但那是很久以前的事了,我不记得那是什么工具,或者这本书叫什么。

原理基本相同:你定义语言语法(C ++标准在其中一个附录中有语言语法示例),将输入文件拆分为标记(如果标记不匹配语法则抛出错误),然后对标记进行分类(它是什么?打开括号,标识符,函数名?)并从这些标记中构建一个树,然后将其转换为相应的语言对象/函数调用等。根据您的语言的复杂程度,您可能会跳过大部分步骤并进行摔跤使用一堆正则表达式将文件输入到提交中。