gene-sis / lime
Lime 解析器生成器
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-23 14:08:01 UTC
README
解释器模式让你感到沮丧?是时候使用真正的解析器了?欢迎来到 Lime。
-
使用 composer 安装 Lime。
composer require gene-sis/lime -
为您的开发操作系统构建 lime_scan_tokens。
对于 Windows,请在命令行中运行
flex -t vendor\gene-sis\lime\scanner\lime_scan_tokens.l > vendor\gene-sis\lime\scanner\lime_scan_tokens.c和gcc vendor\gene-sis\lime\scanner\lime_scan_tokens.c -o vendor\gene-sis\lime\scanner\lime_scan_tokens.exe。 -
编写语法文件
Lime 使用略微修改和调整的巴科斯-诺尔范式。您可以通过查看 /vendor/gene-sis/lime/examples 文件夹中的 .lime 示例来了解语法。
您可以按照 BISON 的要求通过数字引用组件(如
exp = exp '+' exp { $$ = $1 + $3; )),或分配符号名称(类似于 Lime 命名的 C 基础 "Lemon" 解析器)exp = exp/a '+' exp/b { $$ = $a + $b; )。哦,还有一件事:如果扫描器将符号提供给解析器,则这些符号是终结符。如果它们出现在产生规则的左侧,则它们是非终结符。Lime 使用字符串而不是 BISON 基础解析器使用的数字来命名语义类别,因此您不必在任何地方声明任何终结符符号列表。 -
定义的预处理器
- %namespace 定义您的解析器文件的命名空间(用单引号括起来),例如
%namespace 'YourProject\Extensions\Lime' - %class 定义您的解析器类名
- %start 定义您的语法的起始符号
- %left
- %right
- %nonassoc
- %expect
- %namespace 定义您的解析器文件的命名空间(用单引号括起来),例如
-
构建您的解析器
php /vendor/gene-sis/lime/lime.php path/to/your/grammar/file.lime > MyParser.php
-
将解析器集成到您的项目中
// below the namespace use YourProject\Extensions\Lime\MyParser; use Genesis\Lime\ParseEngine; use Genesis\Lime\ParseError; // create the parser instance $parser = new ParseEngine( new MyParser() ); // run the parser try { // reset the parser $parser->reset(); // tokenize your input with a suitable function/method and feed the // tokens to the parser foreach( tokenize( $input ) as $token ) { $parser->eat( $token['type'], $token['value'] ); } // get the result $result = $parser->eat_eof(); } catch ( ParseError $e ) { // handle parse errors $error = $e->getMessage(); }
- 现在您有了解析内容的计算语义值。添加一些调料,然后上菜。