You've already forked MyDSL
38 lines
1012 B
PHP
38 lines
1012 B
PHP
<?php
|
|
/**
|
|
* @filename FactoryInterface.php
|
|
* @author Jerry Yan <792602257@qq.com>
|
|
* @date 2021/1/22 13:42
|
|
*/
|
|
|
|
|
|
namespace JerryYan\DSL\Token\Factory;
|
|
|
|
|
|
|
|
use JerryYan\DSL\Token\TokenInterface;
|
|
use JerryYan\DSL\Token\TokenUndefined;
|
|
|
|
abstract class FactoryInterface
|
|
{
|
|
/** @var array<string, class-string<TokenInterface>> Token类型及映射类 */
|
|
protected $tokenMap = [];
|
|
/** @var array<string, string> Token别名映射 */
|
|
protected $tokenNameMap = [];
|
|
/** @var class-string<TokenInterface> 默认Token类 */
|
|
protected $undefinedTokenClass = TokenUndefined::class;
|
|
|
|
public function getTokenByName(string $name): TokenInterface
|
|
{
|
|
$originalName = $name;
|
|
if (isset($this->tokenNameMap[$name])) {
|
|
$name = $this->tokenNameMap[$name];
|
|
}
|
|
if (!isset($this->tokenMap[$name])) {
|
|
return new $this->undefinedTokenClass($originalName);
|
|
} else {
|
|
return new $this->tokenMap[$name]($originalName);
|
|
}
|
|
}
|
|
|
|
} |