⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchcommandparser.y.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
字号:
%name SearchCommandParser%declare_class {class SearchCommandParser}%include_class {    private $expr_result;    private $parse_result;    public function __construct()    {        $this->parse_result = 'ok';    }    public function getExprResult()    {        return $this->expr_result;    }    public function isExprOk()    {        return $this->parse_result == 'ok';    }}%type expr {Expr}%left OPOR.%left OPAND.%right NOT.%left IS CONTAIN LIKE BETWEEN START END.%left GT LE LT GE.%syntax_error{    $this->parse_result = 'syntax';    $this->parse_message = "";}%parse_accept{      $this->parse_result  = 'ok';}%parse_failure{    $this->parse_result = 'syntax';}%start_symbol   cmdlinecmdline      ::= expr(A).{	$this->expr_result = A;}expr(A)         ::= expr(B) OPAND expr(C).{	A = new OpExpr(B, ExprOp::OP_AND, C);}expr(A)         ::= expr(B) OPOR expr(C).{	A = new OpExpr(B, ExprOp::OP_OR, C);}expr(A)         ::= NOT expr(B).{	$expr = B;	$expr->not(!$expr->not());	A = $expr;}expr(A)         ::= PAR_OPEN expr(B) PAR_CLOSE.{	A = B;}expr(A)         ::= terminal(B) operator(C) value(D).{	$op = C;	$not = false;	if ($op == ExprOp::IS_NOT)	{		$op = ExprOp::IS;		$not = true;	}	$fld = new OpExpr(B, $op, D);	$fld->not($not);	A = $fld;}expr(A)         ::= terminal(B) notop(C) BETWEEN value(D) OPAND value(E). [BETWEEN]{	$expr = new OpExpr(B, ExprOp::BETWEEN, new BetweenValueExpr(D, E));	$expr->not(C);	A=$expr;}expr(A)         ::= terminal(B) notop(C) LIKE value(D).{	$expr = new OpExpr(B, ExprOp::LIKE, D);	$expr->not(C);	A=$expr;}expr(A)         ::= terminal(B) IS notop(C) value(D).{	$expr = new OpExpr(B, ExprOp::IS, D);	$expr->not(C);	A=$expr;}expr(A)         ::= terminal(B) DOES notop(C) CONTAINS value(D).{	$expr = new OpExpr(B, ExprOp::CONTAINS, D);	$expr->not(C);	A=$expr;}expr(A)			::= terminal(B) COLON value(C).{	A = new OpExpr(B, ExprOp::CONTAINS, C);}notop(A)        ::= .{	A = false;}notop(A)        ::= NOT.{	A = true;}terminal(A)     ::= SQUARE_OPEN value(B) SQUARE_CLOSE SQUARE_OPEN value(C) SQUARE_CLOSE.{	$registry = ExprFieldRegistry::getRegistry();	$field = $registry->resolveMetadataField(B, C);	A = $field;}terminal(A)     ::= TERMINAL(B).{	$registry = ExprFieldRegistry::getRegistry();	$field=$registry->resolveAlias(B);	A = $field;}value(A)        ::= VALUE(B).{	A = B;}value(A)		::= PAR_OPEN valuelist(B) PAR_CLOSE.{	A = B;}valuelist(A)	::= VALUE(B) COMMA valuelist(C).{	C->addValue(B);	A = C;}valuelist(A)	::= VALUE(B).{	A = new ValueListExpr(B);}operator(A)     ::= CONTAINS.{	A = ExprOp::CONTAINS;}operator(A)     ::= LT.{	A = ExprOp::LESS_THAN;}operator(A)     ::= GT.{	A = ExprOp::GREATER_THAN;}operator(A)     ::= LE.{	A = ExprOp::LESS_THAN_EQUAL;}operator(A)     ::= GE.{	A = ExprOp::GREATER_THAN_EQUAL;}operator(A)     ::= START WITH.{	A = ExprOp::STARTS_WITH;}operator(A)     ::= END WITH.{	A = ExprOp::ENDS_WITH;}operator(A)     ::= IS_NOT.{	A = ExprOp::IS_NOT;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -