解析c++文本文件的例程
Routines for parsing a text file in C++
我想用c++解析一个文本文件。我知道这个文件的语法,从计算机科学的角度来看,我认为我没有任何问题。然而,我不知道如何在c++中实现解析器。我认为有很多可能性:
-
flex/yacc:我认为这个工具链有点过时了,我认为它不能很好地与我的程序的其余部分一起工作。
-
plain C:我可以将整个文件读取到一个字符数组中,并使用指针进行随机访问。问题是文本文件可能很大,我真的不想一直把它们存储在内存中。
-
c++ istreams:我认为这里的问题是,在解析文件的过程中,我当然需要某种向前看。如果表达式不匹配,那么我当然必须把目前为止读到的字符放回流中。我认为在c++中使用ungetch函数会变得相当难看。此外,由于表达式可能相当长,peek函数可能不适合我。
-
使用boost: boost提供正则表达式,这将是完美的识别令牌,但就我的研究而言,不可能匹配正则表达式并在istream的上下文中使用令牌。
我之前也用过javacc和java,我不得不说我对它印象非常深刻。然而,我不认为c++中有这样的东西,是吗?
如果有人在这方面有经验的话,我将非常感激。
如果这是真的:
C:我可以将整个文件读入一个字符数组,并使用指针进行随机访问。问题是文本文件可能很大,我真的不想一直把它们存储在内存中。
你应该查看内存映射文件。
Iczelion有一个很好的关于内存映射文件的Windows API的教程。
POSIX提供mmap()
。Beej在一个新的地址上重新上线了,并在这里提供了一个使用示例。
Boost还提供了一种独立于平台的方式来使用上述内容。我不太了解它,因为我宁愿自己写这样的东西。我相信它有它的优点。Boost在这里有一个关于它的页面。
Stack Overflow有一个关于解析mmap()
文件的问题。
您也可以将ANTLR视为解析器生成器。
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- c++类声明时,相同的例程,不同的成员变量类型
- C++为线程工作动态地分割例程
- 子例程,不使用 pow,并带有参数和返回
- 直接在RcppArmadillo中调用LAPACK例程
- 如何将C++子例程链接到 x86 程序集程序?
- PX 转换例程编译问题
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- 只允许授权代码调用库中的例程
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 调用子例程时类型不匹配
- 将分配给C++数组传递给 Fortran 子例程
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- Posix 线程类和启动例程 (pthread)
- C++中的多线程文件哈希
- OpenBLAS 只为一个例程设置线程数
- 复制文件时如何调用取消?(使用复制文件 ex 函数和复制进度例程回调函数)
- 解析c++文本文件的例程
- 初始化头文件中声明的模板构造函数/例程
- 从输入文件的最后一列决定一个例程