规范Token名称
This commit is contained in:
parent
2489b52da2
commit
9610d0609d
@ -10,23 +10,21 @@ namespace JerryYan\DSL\Token\Factory;
|
|||||||
|
|
||||||
|
|
||||||
use JerryYan\DSL\Token\Token;
|
use JerryYan\DSL\Token\Token;
|
||||||
use JerryYan\DSL\Token\TokenAnd;
|
use JerryYan\DSL\Token\TokenLogicAnd;
|
||||||
use JerryYan\DSL\Token\TokenOr;
|
use JerryYan\DSL\Token\TokenDefine;
|
||||||
use JerryYan\DSL\Token\TokenVar;
|
use JerryYan\DSL\Token\TokenLogicEqual;
|
||||||
|
use JerryYan\DSL\Token\TokenLogicOr;
|
||||||
|
use JerryYan\DSL\Token\TokenVariable;
|
||||||
|
|
||||||
class DefaultFactory extends FactoryInterface
|
class DefaultFactory extends FactoryInterface
|
||||||
{
|
{
|
||||||
protected $tokenMap = [
|
protected $tokenMap = [
|
||||||
Token::AND => TokenAnd::class,
|
Token::LOGIC_AND => TokenLogicAnd::class,
|
||||||
Token::OR => TokenOr::class,
|
Token::LOGIC_OR => TokenLogicOr::class,
|
||||||
Token::VAR => TokenVar::class,
|
Token::LOGIC_EQUAL => TokenLogicEqual::class,
|
||||||
|
Token::VARIABLE => TokenVariable::class,
|
||||||
|
Token::DEFINE => TokenDefine::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $tokenNameMap = [
|
protected $undefinedTokenClass = TokenVariable::class;
|
||||||
"和" => Token::AND,
|
|
||||||
"或者" => Token::OR,
|
|
||||||
"或" => Token::OR,
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $undefinedTokenClass = TokenVar::class;
|
|
||||||
}
|
}
|
@ -17,11 +17,22 @@ abstract class FactoryInterface
|
|||||||
{
|
{
|
||||||
/** @var array<string, class-string<TokenInterface>> Token类型及映射类 */
|
/** @var array<string, class-string<TokenInterface>> Token类型及映射类 */
|
||||||
protected $tokenMap = [];
|
protected $tokenMap = [];
|
||||||
/** @var array<string, string> Token别名映射 */
|
/** @var array<string, class-string<TokenInterface>> Token别名映射 */
|
||||||
protected $tokenNameMap = [];
|
protected $tokenNameMap = [];
|
||||||
/** @var class-string<TokenInterface> 默认Token类 */
|
/** @var class-string<TokenInterface> 默认Token类 */
|
||||||
protected $undefinedTokenClass = TokenUndefined::class;
|
protected $undefinedTokenClass = TokenUndefined::class;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
foreach ($this->tokenMap as $key=>$token) {
|
||||||
|
if (property_exists($token, "alias")){
|
||||||
|
foreach ($token::$alias as $name) {
|
||||||
|
$this->tokenNameMap[$name] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function getTokenByName(string $name): TokenInterface
|
public function getTokenByName(string $name): TokenInterface
|
||||||
{
|
{
|
||||||
$originalName = $name;
|
$originalName = $name;
|
||||||
|
@ -17,7 +17,31 @@ namespace JerryYan\DSL\Token;
|
|||||||
*/
|
*/
|
||||||
final class Token
|
final class Token
|
||||||
{
|
{
|
||||||
const AND = "And";
|
// 逻辑相关
|
||||||
const OR = "Or";
|
const LOGIC_OR = "LOGIC_OR";
|
||||||
const VAR = "Var";
|
const LOGIC_AND = "LOGIC_AND";
|
||||||
|
const LOGIC_NOT = "LOGIC_NOT";
|
||||||
|
const LOGIC_EQUAL = "LOGIC_EQUAL";
|
||||||
|
const LOGIC_NOT_EQUAL = "LOGIC_NOT_EQUAL";
|
||||||
|
const LOGIC_GREATER = "LOGIC_GREATER";
|
||||||
|
const LOGIC_GREATER_EQUAL = "LOGIC_GREATER_EQUAL";
|
||||||
|
const LOGIC_LESS = "LOGIC_LESS";
|
||||||
|
const LOGIC_LESS_EQUAL = "LOGIC_LESS_EQUAL";
|
||||||
|
// 变量相关
|
||||||
|
const DEFINE = "DEFINE";
|
||||||
|
const VARIABLE = "VARIABLE";
|
||||||
|
const VAR_ASSIGN = "VAR_ASSIGN";
|
||||||
|
// 运算符相关
|
||||||
|
const OP_CONCAT = "Concat";
|
||||||
|
const OP_PLUS = "OP_PLUS";
|
||||||
|
const OP_PLUS_EQUAL = "OP_PLUS_EQUAL";
|
||||||
|
const OP_MINUS = "OP_MINUS";
|
||||||
|
const OP_MINUS_EQUAL = "OP_MINUS_EQUAL";
|
||||||
|
const OP_MULTIPLY = "OP_MULTIPLY";
|
||||||
|
const OP_MULTIPLY_EQUAL = "OP_MULTIPLY_EQUAL";
|
||||||
|
// 逻辑运算相关
|
||||||
|
const OP_OR = "OP_OR";
|
||||||
|
const OP_AND = "OP_AND";
|
||||||
|
const OP_XOR = "OP_XOR";
|
||||||
|
const OP_NOR = "OP_NOR";
|
||||||
}
|
}
|
@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* @filename TokenAnd.php
|
|
||||||
* @author Jerry Yan <792602257@qq.com>
|
|
||||||
* @date 2020/12/17 15:20
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace JerryYan\DSL\Token;
|
|
||||||
|
|
||||||
|
|
||||||
class TokenAnd extends TokenInterface
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -17,6 +17,8 @@ abstract class TokenInterface
|
|||||||
protected $nextToken=NULL;
|
protected $nextToken=NULL;
|
||||||
/** @var string 原始数据 */
|
/** @var string 原始数据 */
|
||||||
protected $_raw = "";
|
protected $_raw = "";
|
||||||
|
/** @var array 定义别名 */
|
||||||
|
static $alias = [];
|
||||||
|
|
||||||
public function __construct(string $original)
|
public function __construct(string $original)
|
||||||
{
|
{
|
||||||
|
17
src/Token/TokenLogicAnd.php
Normal file
17
src/Token/TokenLogicAnd.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenLogicAnd.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:20
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
class TokenLogicAnd extends TokenInterface
|
||||||
|
{
|
||||||
|
public static $alias = [
|
||||||
|
'和', '且'
|
||||||
|
];
|
||||||
|
}
|
15
src/Token/TokenLogicEqual.php
Normal file
15
src/Token/TokenLogicEqual.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenLogicEqual.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2021/1/22 14:56
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
class TokenLogicEqual extends TokenInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
17
src/Token/TokenLogicOr.php
Normal file
17
src/Token/TokenLogicOr.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenLogicAnd.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:20
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
class TokenLogicOr extends TokenInterface
|
||||||
|
{
|
||||||
|
public static $alias = [
|
||||||
|
'或者'
|
||||||
|
];
|
||||||
|
}
|
@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* @filename TokenAnd.php
|
|
||||||
* @author Jerry Yan <792602257@qq.com>
|
|
||||||
* @date 2020/12/17 15:20
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace JerryYan\DSL\Token;
|
|
||||||
|
|
||||||
|
|
||||||
class TokenOr extends TokenInterface
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @filename TokenVar.php
|
* @filename TokenVariable.php
|
||||||
* @author Jerry Yan <792602257@qq.com>
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
* @date 2021/1/22 9:41
|
* @date 2021/1/22 9:41
|
||||||
*/
|
*/
|
||||||
@ -9,7 +9,7 @@
|
|||||||
namespace JerryYan\DSL\Token;
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
class TokenVar extends TokenInterface
|
class TokenVariable extends TokenInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
@ -7,23 +7,23 @@
|
|||||||
|
|
||||||
namespace JerryYan\DSL\Test\Token;
|
namespace JerryYan\DSL\Test\Token;
|
||||||
|
|
||||||
use JerryYan\DSL\Token\TokenAnd;
|
use JerryYan\DSL\Token\TokenLogicAnd;
|
||||||
use JerryYan\DSL\Token\TokenDefine;
|
use JerryYan\DSL\Token\TokenDefine;
|
||||||
use JerryYan\DSL\Token\TokenInterface;
|
use JerryYan\DSL\Token\TokenInterface;
|
||||||
use JerryYan\DSL\Token\TokenOr;
|
use JerryYan\DSL\Token\TokenLogicOr;
|
||||||
use JerryYan\DSL\Token\TokenUndefined;
|
use JerryYan\DSL\Token\TokenUndefined;
|
||||||
use JerryYan\DSL\Token\TokenVar;
|
use JerryYan\DSL\Token\TokenVariable;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class TokenInterfaceTest extends TestCase
|
class TokenInterfaceTest extends TestCase
|
||||||
{
|
{
|
||||||
/** @var class-string<TokenInterface>[] TokenClass */
|
/** @var class-string<TokenInterface>[] TokenClass */
|
||||||
private $tokenTypes = [
|
private $tokenTypes = [
|
||||||
TokenAnd::class,
|
TokenLogicAnd::class,
|
||||||
TokenDefine::class,
|
TokenDefine::class,
|
||||||
TokenOr::class,
|
TokenLogicOr::class,
|
||||||
TokenUndefined::class,
|
TokenUndefined::class,
|
||||||
TokenVar::class,
|
TokenVariable::class,
|
||||||
];
|
];
|
||||||
protected $chainFirst;
|
protected $chainFirst;
|
||||||
protected $chainLast;
|
protected $chainLast;
|
||||||
|
@ -9,10 +9,10 @@ namespace JerryYan\DSL\Test\Tokenizer;
|
|||||||
|
|
||||||
use JerryYan\DSL\Reader\StringReader;
|
use JerryYan\DSL\Reader\StringReader;
|
||||||
use JerryYan\DSL\Token\Factory\DefaultFactory;
|
use JerryYan\DSL\Token\Factory\DefaultFactory;
|
||||||
use JerryYan\DSL\Token\TokenAnd;
|
use JerryYan\DSL\Token\TokenLogicAnd;
|
||||||
use JerryYan\DSL\Token\TokenInterface;
|
use JerryYan\DSL\Token\TokenInterface;
|
||||||
use JerryYan\DSL\Token\TokenOr;
|
use JerryYan\DSL\Token\TokenLogicOr;
|
||||||
use JerryYan\DSL\Token\TokenVar;
|
use JerryYan\DSL\Token\TokenVariable;
|
||||||
use JerryYan\DSL\Tokenizer\Tokenizer;
|
use JerryYan\DSL\Tokenizer\Tokenizer;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
@ -23,13 +23,13 @@ class TokenizerTest extends TestCase
|
|||||||
private $text = "这个 和 那个 或者 那个 和 这个";
|
private $text = "这个 和 那个 或者 那个 和 这个";
|
||||||
/** @var class-string<TokenInterface>[] 预期的类型 */
|
/** @var class-string<TokenInterface>[] 预期的类型 */
|
||||||
private $textTokenType = [
|
private $textTokenType = [
|
||||||
TokenVar::class,
|
TokenVariable::class,
|
||||||
TokenAnd::class,
|
TokenLogicAnd::class,
|
||||||
TokenVar::class,
|
TokenVariable::class,
|
||||||
TokenOr::class,
|
TokenLogicOr::class,
|
||||||
TokenVar::class,
|
TokenVariable::class,
|
||||||
TokenAnd::class,
|
TokenLogicAnd::class,
|
||||||
TokenVar::class,
|
TokenVariable::class,
|
||||||
];
|
];
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user