dfar143/cheope_ppg_ns

此包最新版本(dev-master)没有可用的许可证信息。

它生成用PHP编写的通用解析器

dev-master 2020-06-15 10:34 UTC

This package is auto-updated.

Last update: 2024-09-21 20:39:00 UTC


README

具有命名空间的PHP通用解析器生成器

PHP回溯解析器生成器。

解析器生成器位于 'grammar_rule_gen' 目录中。主模块是 'parser_gen_exec.php'。

用法:php parser_gen_exec.php |prjName| -l |logFileName|

其中 |prjName| 是项目名称,必须与 |prjName|.xml 语法定义文件匹配。

示例:php parser_gen_exec.php example_1 -l log.txt 或(-l 标志是可选的)php parser_gen_exec.php example_1

该模块也可以从浏览器中调用:默认日志文件名为 'log.txt'。在这种情况下,要指定项目名称,必须编辑 'grammar_rules_gen_def.php' 文件并将 PRJ_NAME 常量设置为正确的项目名称。

语法定义文件允许在 'grammar_rules' 部分中写入任意数量的语法。每个语法必须有一个包含非空 'name' 属性的 'grammar_rule' 主要部分。主要部分包含 3 个子部分:'tokens_def' 包含令牌的正则表达式定义('token' 标签);'tokens_attributes' 包含令牌属性定义('Attr' 标签);'productions' 包含语法的所有生成式('production' 标签)。

一个通用生成式具有非常简单的语法;它由非终结符(大写)、终结符(小写)、分隔左右生成式两边的等号(=)符号以及逻辑或符号(|)组成。终结符 'epsilon' 是始终为真的终结符。终结符 'ws' 用于指定空白,其确切定义必须包含(带有其正则表达式)在令牌定义部分中。非终结符 SPACE 的代码会自动生成,并关联的生成式(隐式存在)是 SPACE = ws | epsilon。非终结符 SPACE 可以自由地用于其他生成式中。右侧通常由终端和非终结符的逻辑或符号分隔的序列组成;每个序列是一个逻辑与序列。

每个令牌由一个具有两个必填属性的 'token' XML 标签定义:'type' 和 'val'。令牌定义的优先级很重要。请参阅 'example_1.xml' 了解语法定义文件的示例。

属性是可选的,但 'tokens_attributes' 部分必须存在。请参阅 'Ric_sql' 目录和文件 'ric_sql_def.php'、'Ric_sql_parser_grammar_rules.php' 了解它们的用法示例。

PHP 模块生成两个其他模块:|prjName|_def.php 和 |prjName|_parser_grammar_rules.php。第一个包含常量、词法规则对象实例定义和语法规则对象实例定义。第二个包含解析器的递归引擎。每次调用都会添加执行结果,因此要创建新的解析器,必须刷新旧文件。然后必须将这些文件复制到目标目录。例如,可以将 'parser_example' 目录用作目标目录。该目录包含其他解析器文件。解析器通用引擎在 'Parser.php' 文件中,包含主要的 PHP 解析器类。该类以公共方法 'exec' 为入口点,尝试所有语法,如果要解析的文本至少满足一个语法,则返回 true。它将每个语法的执行状态填充到 '$results' 数组中。请参阅 'Parser.php' 文件注释。

在 'Parser_example' 目录中存在 'parser_exec.php' 模块,它调用解析器引擎。

用法:php parser_exec.php |textToBeParsedFileName|

其中 |textToBeParsedFileName| 是包含待解析文本的文件。

示例:php parser_exec.php example.txt

'parser_exec.php' 模块像验证器一样工作,如果成功则返回 'Ok.',如果失败则返回当前错误。此外,如果它被浏览器调用,它会显示符号表。

'php_arrays' 和 'ric_sql' 应用程序正在开发中。

此应用程序是用 PHP 版本 5.5.7 开发的,但我想它可以使用许多其他早期版本,因为除了类构造之外,没有使用特别先进的技术。