From ca612f74f278f6c45b8411a656f7adcee8559449 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 22 Jan 2021 17:00:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E5=A4=9AToken=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 3 +-- src/Token/Factory/DefaultFactory.php | 8 +++++++- src/Token/Token.php | 17 +++++++++++++++-- src/Token/TokenFake.php | 17 +++++++++++++++++ src/Token/TokenLogicEqual.php | 4 +++- src/Token/TokenLogicFake.php | 17 +++++++++++++++++ src/Token/TokenLogicOr.php | 2 +- src/Token/TokenUseVariable.php | 17 +++++++++++++++++ tests/Token/TokenInterfaceTest.php | 6 ++++-- tests/Tokenizer/TokenizerTest.php | 5 ++++- 10 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/Token/TokenFake.php create mode 100644 src/Token/TokenLogicFake.php create mode 100644 src/Token/TokenUseVariable.php diff --git a/composer.json b/composer.json index dde5958..e8aba1d 100644 --- a/composer.json +++ b/composer.json @@ -15,8 +15,7 @@ }, "require-dev": { "phpunit/phpunit": "^9.0", - "mockery/mockery": "^1.4", - "phpstan/phpstan": "^0.12.68" + "mockery/mockery": "^1.4" }, "autoload": { "psr-4": { diff --git a/src/Token/Factory/DefaultFactory.php b/src/Token/Factory/DefaultFactory.php index c6fa532..31ff88c 100644 --- a/src/Token/Factory/DefaultFactory.php +++ b/src/Token/Factory/DefaultFactory.php @@ -10,20 +10,26 @@ namespace JerryYan\DSL\Token\Factory; use JerryYan\DSL\Token\Token; -use JerryYan\DSL\Token\TokenLogicAnd; use JerryYan\DSL\Token\TokenDefine; +use JerryYan\DSL\Token\TokenFake; +use JerryYan\DSL\Token\TokenLogicAnd; use JerryYan\DSL\Token\TokenLogicEqual; +use JerryYan\DSL\Token\TokenLogicFake; use JerryYan\DSL\Token\TokenLogicOr; +use JerryYan\DSL\Token\TokenUseVariable; use JerryYan\DSL\Token\TokenVariable; class DefaultFactory extends FactoryInterface { protected $tokenMap = [ + Token::FAKE => TokenFake::class, Token::LOGIC_AND => TokenLogicAnd::class, Token::LOGIC_OR => TokenLogicOr::class, Token::LOGIC_EQUAL => TokenLogicEqual::class, + Token::LOGIC_FAKE => TokenLogicFake::class, Token::VARIABLE => TokenVariable::class, Token::DEFINE => TokenDefine::class, + Token::USE_VARIABLE => TokenUseVariable::class, ]; protected $undefinedTokenClass = TokenVariable::class; diff --git a/src/Token/Token.php b/src/Token/Token.php index 42e1504..7d1b766 100644 --- a/src/Token/Token.php +++ b/src/Token/Token.php @@ -22,23 +22,36 @@ final class Token const LOGIC_AND = "LOGIC_AND"; const LOGIC_NOT = "LOGIC_NOT"; const LOGIC_EQUAL = "LOGIC_EQUAL"; + const LOGIC_EQUAL_STRONG = "LOGIC_EQUAL_STRONG"; const LOGIC_NOT_EQUAL = "LOGIC_NOT_EQUAL"; + const LOGIC_NOT_EQUAL_STRONG = "LOGIC_NOT_EQUAL_STRONG"; 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 LOGIC_FAKE = "LOGIC_FAKE"; // 变量相关 const DEFINE = "DEFINE"; + const USE_VARIABLE = "USE_VARIABLE"; const VARIABLE = "VARIABLE"; - const VAR_ASSIGN = "VAR_ASSIGN"; + const ASSIGN = "ASSIGN"; + const CALL = "CALL"; + const FAKE = "FAKE"; // 运算符相关 - const OP_CONCAT = "Concat"; + const OP_CONCAT = "OP_CONCAT"; + const OP_CONCAT_EQUAL = "OP_CONCAT_EQUAL"; 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_DIVIDE = "OP_DIVIDE"; + const OP_DIVIDE_EQUAL = "OP_DIVIDE_EQUAL"; + const OP_MOD = "OP_MOD"; + const OP_MOD_EQUAL = "OP_MOD_EQUAL"; + const OP_POW = "OP_POW"; + const OP_POW_EQUAL = "OP_POW_EQUAL"; // 逻辑运算相关 const OP_OR = "OP_OR"; const OP_AND = "OP_AND"; diff --git a/src/Token/TokenFake.php b/src/Token/TokenFake.php new file mode 100644 index 0000000..e204efe --- /dev/null +++ b/src/Token/TokenFake.php @@ -0,0 +1,17 @@ + + * @date 2021/1/22 16:45 + */ + + +namespace JerryYan\DSL\Token; + + +class TokenFake extends TokenInterface +{ + public static $alias = [ + '然后', '之后' + ]; +} \ No newline at end of file diff --git a/src/Token/TokenLogicEqual.php b/src/Token/TokenLogicEqual.php index eb47bf3..2994b61 100644 --- a/src/Token/TokenLogicEqual.php +++ b/src/Token/TokenLogicEqual.php @@ -11,5 +11,7 @@ namespace JerryYan\DSL\Token; class TokenLogicEqual extends TokenInterface { - + public static $alias = [ + '等于' + ]; } \ No newline at end of file diff --git a/src/Token/TokenLogicFake.php b/src/Token/TokenLogicFake.php new file mode 100644 index 0000000..423fdcd --- /dev/null +++ b/src/Token/TokenLogicFake.php @@ -0,0 +1,17 @@ + + * @date 2021/1/22 16:56 + */ + + +namespace JerryYan\DSL\Token; + + +class TokenLogicFake extends TokenInterface +{ + public static $alias = [ + '当', '的时候', '时' + ]; +} \ No newline at end of file diff --git a/src/Token/TokenLogicOr.php b/src/Token/TokenLogicOr.php index 8d503b9..43c7fa3 100644 --- a/src/Token/TokenLogicOr.php +++ b/src/Token/TokenLogicOr.php @@ -12,6 +12,6 @@ namespace JerryYan\DSL\Token; class TokenLogicOr extends TokenInterface { public static $alias = [ - '或者' + '或', '或者' ]; } \ No newline at end of file diff --git a/src/Token/TokenUseVariable.php b/src/Token/TokenUseVariable.php new file mode 100644 index 0000000..337ba67 --- /dev/null +++ b/src/Token/TokenUseVariable.php @@ -0,0 +1,17 @@ + + * @date 2021/1/22 9:41 + */ + + +namespace JerryYan\DSL\Token; + + +class TokenUseVariable extends TokenInterface +{ + public static $alias = [ + '把', '将' + ]; +} \ No newline at end of file diff --git a/tests/Token/TokenInterfaceTest.php b/tests/Token/TokenInterfaceTest.php index 42f2d3a..ed516e4 100644 --- a/tests/Token/TokenInterfaceTest.php +++ b/tests/Token/TokenInterfaceTest.php @@ -8,7 +8,8 @@ namespace JerryYan\DSL\Test\Token; use JerryYan\DSL\Token\TokenLogicAnd; -use JerryYan\DSL\Token\TokenDefine; +use JerryYan\DSL\Token\TokenLogicEqual; +use JerryYan\DSL\Token\TokenUseVariable; use JerryYan\DSL\Token\TokenInterface; use JerryYan\DSL\Token\TokenLogicOr; use JerryYan\DSL\Token\TokenUndefined; @@ -20,7 +21,8 @@ class TokenInterfaceTest extends TestCase /** @var class-string[] TokenClass */ private $tokenTypes = [ TokenLogicAnd::class, - TokenDefine::class, + TokenLogicEqual::class, + TokenUseVariable::class, TokenLogicOr::class, TokenUndefined::class, TokenVariable::class, diff --git a/tests/Tokenizer/TokenizerTest.php b/tests/Tokenizer/TokenizerTest.php index 68c28c5..1edce68 100644 --- a/tests/Tokenizer/TokenizerTest.php +++ b/tests/Tokenizer/TokenizerTest.php @@ -11,6 +11,7 @@ use JerryYan\DSL\Reader\StringReader; use JerryYan\DSL\Token\Factory\DefaultFactory; use JerryYan\DSL\Token\TokenLogicAnd; use JerryYan\DSL\Token\TokenInterface; +use JerryYan\DSL\Token\TokenLogicFake; use JerryYan\DSL\Token\TokenLogicOr; use JerryYan\DSL\Token\TokenVariable; use JerryYan\DSL\Tokenizer\Tokenizer; @@ -20,9 +21,10 @@ class TokenizerTest extends TestCase { protected $tokenizer; protected $reader; - private $text = "这个 和 那个 或者 那个 和 这个"; + private $text = "当 这个 和 那个 或者 那个 和 这个 的时候"; /** @var class-string[] 预期的类型 */ private $textTokenType = [ + TokenLogicFake::class, TokenVariable::class, TokenLogicAnd::class, TokenVariable::class, @@ -30,6 +32,7 @@ class TokenizerTest extends TestCase TokenVariable::class, TokenLogicAnd::class, TokenVariable::class, + TokenLogicFake::class, ]; protected function setUp(): void {