webapper/parzrkit 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

webapper/parzrkit

Composer 安装命令:

composer require webapper/parzrkit

包简介

ParzRKit

关键字:

README 文档

README

ParzRKit is an abstract parser library written in PHP for future purposes

This is a part of a light-weight framework, Prometheus: http://webapper.vallalatiszolgaltatasok.hu/#!/prometheus (language only in hungarian, sorry)

Creative Commons License
ParzRKit by Assarte D'Raven is licensed under a Creative Commons Attribution 4.0 International License.

How you help me

Feel free to use my lib, I hope that you may enjoy that and may help you on your better efficiency. Well, you should donate me some credits via PayPal if my help counts for you on your work:

PayPal - The safer, easier way to pay online!

...or give me some positive feedback on my e-mail adress (you can see that in my profile).

Thanks anyway!

How it works

It's a quite easy way to use this lib basically:

  1. Create a Lexer class which extends ParzRKit's Lexer, and create its Node classes
  2. Create Linker class(es) which are extends ParzRKit's Linker - keep in mind that your Linker classes must fits your needs of your Node classes!
  3. Nearly just Parser->parse()->compile()->link(); I said: nearly

This is a working example of usage:

use ParzRKit\Parser\Lexer\AbstractToken;
use ParzRKit\Parser\Lexer;
use ParzRKit\Linker;
use ParzRKit\Parser;
use ParzRKit\Compiler;
use ParzRKit\Parser\Lexer\DataStreamToken;

define('SRC', realpath(dirname(dirname(__FILE__))).'/src/vendor/assarte/parzrkit/lib/');

require SRC.'Parser/Lexer/AbstractToken.php';
require SRC.'Parser/Lexer/ComposedToken.php';
require SRC.'Parser/Lexer/DataStreamToken.php';
require SRC.'Parser/ReturnToParentException.php';
require SRC.'Parser/Lexer.php';
require SRC.'Parser.php';
require SRC.'Linker.php';
require SRC.'Compiler/CompileException.php';
require SRC.'Compiler/Exception/NotAllowedException.php';
require SRC.'Compiler/Exception/NotMetException.php';
require SRC.'Compiler/BasicNode.php';
require SRC.'Compiler/StrictNode.php';
require SRC.'Compiler/RecursiveNodeIterator.php';
require SRC.'Compiler.php';

class TestToken extends DataStreamToken
{
	public function isDataStream()
	{
		return false;
	}
	
	public function identifyOpenTag()
	{
		if ($this->stream{0} == '/') {
			$this->openTag = '/';
		}
	}
}

class TestSubToken extends AbstractToken
{
	public function identifyOpenTag()
	{
		if ($this->stream{0} == '[') {
			$this->openTag = '[';
		}
	}

	public function identifyCloseTag($inStream=null)
	{
		$pos = $this->getCursor();
		if ($inStream !== null) {
			$pos = 0;
		} else {
			$inStream = $this->processed;
		}
		
		if ($inStream{$pos} == ']') {
			$this->closeTag = ']';
			return true;
		}

		return false;
	}

	public function guessCloseTag()
	{
		return ']';
	}
}

class TestLexer extends Lexer
{
	protected function registerTokeners()
	{
		$this->addTokener('TestToken');
		$this->addTokener('TestSubToken');
	}
}

class TestLinker extends Linker
{
	public function link()
	{
		$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($this));
		foreach ($it as $link) {
			echo str_repeat('| ', $it->getDepth() - 1).'|-'.json_encode($link).'<br>';
		}
	}
}

$stream = '[876/t687][aa[bb[dd]]cc]';
$parser = new Parser($stream, TestLexer::getLexer());
$parser->parse();
$compiler = new Compiler(new TestLinker(), $parser->getToken()->getNode());
$compiler->compile();
echo $stream.'<br>';
$compiler->getLinker()->link();

The example above will print:

[876/t687][aa[bb[dd]]cc]
|-"[876\/t687]"
| |-"876"
| |-"\/t687"
|-"[aa[bb[dd]]cc]"
| |-"aa"
| |-"[bb[dd]]"
| | |-"bb"
| | |-"[dd]"
| |-"cc"

统计信息

  • 总下载量: 8
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: CC-4.0
  • 更新时间: 2014-09-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固