出于好奇,我想知道人们可以用解析器做什么,它们是如何应用的,人们通常用它来创建什么?
我知道它在编程语言行业中被广泛使用,但是我认为这只是其中的一小部分,对吧?
除了特殊用途的语言之外,我最雄心勃勃地使用解析器生成器(在 C 中使用旧的 yacc,然后在 Python 中再次使用 pyparsing)是从 SQL 查询中提取、验证和可能更改某些元信息——解析正确地使用 SQL 是一个真正的挑战(尤其是如果您希望支持多种方言!-),解析器生成器(以及它位于其之上的词法分析器)至少可以消除这部分工作!-)
它们用于解析文本......
举一个更具体的例子,在我工作的地方,我们使用 lexx/yacc 来解析来自套接字的字符串。
同样从名称中,它应该让您了解 javacc 的用途(java 编译器编译器!)
通常用于解析领域特定语言或脚本语言,或对代码片段的类似支持。
以前我见过它用于解析另一个软件工具的基于命令行的输出。这样,外部工具(VPN 软件)可以在不修改的情况下重新使用基本路由器 IPSec 代码。由于解析的大部分内容是 IP 路由表和其他结构化的重复文本。
使用解析器可以在格式更改时进行简单更改,而不是尝试查找和调整手写解析器。并且输出确实改变了产品生命周期的几次。
我使用解析器帮助将 +/- 800 个 Clipper 源文件处理成可以用 Alaksa Xbase 32 编译的类似 PRG。
您可以使用它来扩展您最喜欢的语言,方法是从他们的存储库中获取其语言定义,然后添加您一直想要的内容。您可以将常规语法传递给您的应用程序并在您自己的程序中处理扩展。