我正在阅读解析器和解析器生成器,并在维基百科的LR解析页面中找到了这个语句:
可以使用LR解析器的一些变体来解析许多编程语言.一个值得注意的例外是C++.
为什么会这样?C++的哪个特定属性导致无法使用LR解析器进行解析?
使用谷歌,我只发现C可以用LR(1)完美解析,但C++需要LR(∞).
这应该是不重新发明轮子的理想情况,但到目前为止,我的搜索一直是徒劳的.
我不想自己写一个,而是想使用现有的C++标记器.令牌将用于全文搜索的索引中.性能非常重要,我将解析许多千兆字节的文本.
编辑:请注意,令牌将用于搜索索引.创建这样的令牌并不是一门精确的科学(afaik),需要一些启发式方法.这已经做了一千次,可能有千种不同的方式,但我甚至找不到其中一个:)
有什么好的指针吗?
谢谢!
我有一组特定领域的半结构化文本文档(会计报告),它们的内容非常相似。但是,数据在每个文档模板上的处理方式不同。
编写一些正则表达式并获取我想要的数据相当容易。但必须对每个新文档布局进行此操作。
我想构建一个通用解析器,它接收一个脚本,说明如何读取特定布局的会计报告,这样对于每个新布局,我需要做的就是编写一个新脚本,这比编写大量正则表达式更简单。
像这样的东西:
解析脚本:
declare collection_name {
date,
description,
amount
}
get customer_name from line 3
get account_id from "AccountID <number>"
read data as <collection_name> from <pattern> until <pattern>
Run Code Online (Sandbox Code Playgroud)
请给我任何线索,告诉我从哪里开始,阅读了哪些内容,或者您是否已经看过类似的内容。我真的很感激任何帮助。
为了为我的 Python 代码编写自定义文档生成器,我想编写一个能够匹配以下内容的正则表达式:
def my_function(arg1,arg2,arg3):
"""
DOC
"""
Run Code Online (Sandbox Code Playgroud)
我当前的问题是,使用以下正则表达式:
def (.+)\((?:(\w+),)*(\w+)\)
Run Code Online (Sandbox Code Playgroud)
我只能匹配my_function, arg2and arg3(根据 Pythex.org)。
我不明白我做错了什么,因为我(?:(\w+),)*应该匹配尽可能多的参数,直到最后一个(此处arg3)。有人能解释一下吗?
谢谢