dfar143 / cheope_ppg_ns
它生成用PHP编写的通用解析器
Requires
- php: >=5.0
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 开发的,但我想它可以使用许多其他早期版本,因为除了类构造之外,没有使用特别先进的技术。