0

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

//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;
}

问题是,我不知道自己在做什么。我想我需要的是关于解析的教科书章节,以使自己了解可用的技术或算法。

4

2 回答 2

3

存在许多构建解析器的工具:

于 2012-04-03T22:50:49.780 回答
0

我想解析一个语法类似于 C++ 源代码的输入文件

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

我不知道我在做什么

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

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

于 2012-04-03T22:50:24.150 回答