gene-sis/lime

该软件包最新版本(2.0.0)没有可用的许可信息。

Lime 解析器生成器

2.0.0 2016-11-20 11:28 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:08:01 UTC


README

解释器模式让你感到沮丧?是时候使用真正的解析器了?欢迎来到 Lime。

  1. 使用 composer 安装 Lime。

    composer require gene-sis/lime

  2. 为您的开发操作系统构建 lime_scan_tokens。

    对于 Windows,请在命令行中运行 flex -t vendor\gene-sis\lime\scanner\lime_scan_tokens.l > vendor\gene-sis\lime\scanner\lime_scan_tokens.cgcc vendor\gene-sis\lime\scanner\lime_scan_tokens.c -o vendor\gene-sis\lime\scanner\lime_scan_tokens.exe

  3. 编写语法文件

    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 基础解析器使用的数字来命名语义类别,因此您不必在任何地方声明任何终结符符号列表。

  4. 定义的预处理器

    • %namespace 定义您的解析器文件的命名空间(用单引号括起来),例如 %namespace 'YourProject\Extensions\Lime'
    • %class 定义您的解析器类名
    • %start 定义您的语法的起始符号
    • %left
    • %right
    • %nonassoc
    • %expect
  5. 构建您的解析器

    php /vendor/gene-sis/lime/lime.php path/to/your/grammar/file.lime > MyParser.php

  6. 将解析器集成到您的项目中

	// 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();
	}
  1. 现在您有了解析内容的计算语义值。添加一些调料,然后上菜。