我有一个包含ABNF语法的文件,标记类似于这个简化的示例:
$name = Bertha {userID=013} | Bob {userID=429} | ( Ben | Benjamin ) {userID=265};
$greet = Hi | Hello | Greetings;
$S = $greet $name;现在的任务是通过解析这个语法的给定句子来获得userID。例如,解析句子
Greetings Bob应该给我们userID 429。语法必须在运行时读取,因为它们可以在运行期间进行更改。
我现在的做法如下:
我知道VoiceXML语法是这样工作的,但我无法为它们找到解析器。基本上,我所能找到的只有解析器生成器,它将为单个语法生成C++代码,这对我来说并不实用,因为语法在编译时并不为人所知。
有什么想法吗?
发布于 2014-10-09 14:54:00
早在2001年,我就编写了一个C++库,它将根据运行时指定的规则生成一个解析器。它可以在SourceForge作为BuildParse项目上使用LGPL许可证。我已经在其他几个项目中使用过它,并且我更新了它,以便在2009年使用C++。如果解析器是快速的并不重要,那么它可能为您工作,或者为您节省一些自己的工作。
基本上,您需要一个解析器来将您的语法解析成构建解析所使用的数据结构(您也可以使用构建解析器),然后运行buildparse解析器生成器来生成一个可以识别令牌的东西。
https://stackoverflow.com/questions/26281210
复制相似问题