规范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\TokenAnd;
|
||||
use JerryYan\DSL\Token\TokenOr;
|
||||
use JerryYan\DSL\Token\TokenVar;
|
||||
use JerryYan\DSL\Token\TokenLogicAnd;
|
||||
use JerryYan\DSL\Token\TokenDefine;
|
||||
use JerryYan\DSL\Token\TokenLogicEqual;
|
||||
use JerryYan\DSL\Token\TokenLogicOr;
|
||||
use JerryYan\DSL\Token\TokenVariable;
|
||||
|
||||
class DefaultFactory extends FactoryInterface
|
||||
{
|
||||
protected $tokenMap = [
|
||||
Token::AND => TokenAnd::class,
|
||||
Token::OR => TokenOr::class,
|
||||
Token::VAR => TokenVar::class,
|
||||
Token::LOGIC_AND => TokenLogicAnd::class,
|
||||
Token::LOGIC_OR => TokenLogicOr::class,
|
||||
Token::LOGIC_EQUAL => TokenLogicEqual::class,
|
||||
Token::VARIABLE => TokenVariable::class,
|
||||
Token::DEFINE => TokenDefine::class,
|
||||
];
|
||||
|
||||
protected $tokenNameMap = [
|
||||
"和" => Token::AND,
|
||||
"或者" => Token::OR,
|
||||
"或" => Token::OR,
|
||||
];
|
||||
|
||||
protected $undefinedTokenClass = TokenVar::class;
|
||||
protected $undefinedTokenClass = TokenVariable::class;
|
||||
}
|
@ -17,11 +17,22 @@ abstract class FactoryInterface
|
||||
{
|
||||
/** @var array<string, class-string<TokenInterface>> Token类型及映射类 */
|
||||
protected $tokenMap = [];
|
||||
/** @var array<string, string> Token别名映射 */
|
||||
/** @var array<string, class-string<TokenInterface>> Token别名映射 */
|
||||
protected $tokenNameMap = [];
|
||||
/** @var class-string<TokenInterface> 默认Token类 */
|
||||
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
|
||||
{
|
||||
$originalName = $name;
|
||||
|
@ -17,7 +17,31 @@ namespace JerryYan\DSL\Token;
|
||||
*/
|
||||
final class Token
|
||||
{
|
||||
const AND = "And";
|
||||
const OR = "Or";
|
||||
const VAR = "Var";
|
||||
// 逻辑相关
|
||||
const LOGIC_OR = "LOGIC_OR";
|
||||
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;
|
||||
/** @var string 原始数据 */
|
||||
protected $_raw = "";
|
||||
/** @var array 定义别名 */
|
||||
static $alias = [];
|
||||
|
||||
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
|
||||
/**
|
||||
* @filename TokenVar.php
|
||||
* @filename TokenVariable.php
|
||||
* @author Jerry Yan <792602257@qq.com>
|
||||
* @date 2021/1/22 9:41
|
||||
*/
|
||||
@ -9,7 +9,7 @@
|
||||
namespace JerryYan\DSL\Token;
|
||||
|
||||
|
||||
class TokenVar extends TokenInterface
|
||||
class TokenVariable extends TokenInterface
|
||||
{
|
||||
|
||||
}
|
@ -7,23 +7,23 @@
|
||||
|
||||
namespace JerryYan\DSL\Test\Token;
|
||||
|
||||
use JerryYan\DSL\Token\TokenAnd;
|
||||
use JerryYan\DSL\Token\TokenLogicAnd;
|
||||
use JerryYan\DSL\Token\TokenDefine;
|
||||
use JerryYan\DSL\Token\TokenInterface;
|
||||
use JerryYan\DSL\Token\TokenOr;
|
||||
use JerryYan\DSL\Token\TokenLogicOr;
|
||||
use JerryYan\DSL\Token\TokenUndefined;
|
||||
use JerryYan\DSL\Token\TokenVar;
|
||||
use JerryYan\DSL\Token\TokenVariable;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class TokenInterfaceTest extends TestCase
|
||||
{
|
||||
/** @var class-string<TokenInterface>[] TokenClass */
|
||||
private $tokenTypes = [
|
||||
TokenAnd::class,
|
||||
TokenLogicAnd::class,
|
||||
TokenDefine::class,
|
||||
TokenOr::class,
|
||||
TokenLogicOr::class,
|
||||
TokenUndefined::class,
|
||||
TokenVar::class,
|
||||
TokenVariable::class,
|
||||
];
|
||||
protected $chainFirst;
|
||||
protected $chainLast;
|
||||
|
@ -9,10 +9,10 @@ namespace JerryYan\DSL\Test\Tokenizer;
|
||||
|
||||
use JerryYan\DSL\Reader\StringReader;
|
||||
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\TokenOr;
|
||||
use JerryYan\DSL\Token\TokenVar;
|
||||
use JerryYan\DSL\Token\TokenLogicOr;
|
||||
use JerryYan\DSL\Token\TokenVariable;
|
||||
use JerryYan\DSL\Tokenizer\Tokenizer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
@ -23,13 +23,13 @@ class TokenizerTest extends TestCase
|
||||
private $text = "这个 和 那个 或者 那个 和 这个";
|
||||
/** @var class-string<TokenInterface>[] 预期的类型 */
|
||||
private $textTokenType = [
|
||||
TokenVar::class,
|
||||
TokenAnd::class,
|
||||
TokenVar::class,
|
||||
TokenOr::class,
|
||||
TokenVar::class,
|
||||
TokenAnd::class,
|
||||
TokenVar::class,
|
||||
TokenVariable::class,
|
||||
TokenLogicAnd::class,
|
||||
TokenVariable::class,
|
||||
TokenLogicOr::class,
|
||||
TokenVariable::class,
|
||||
TokenLogicAnd::class,
|
||||
TokenVariable::class,
|
||||
];
|
||||
protected function setUp(): void
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user