基础内容
This commit is contained in:
parent
31009d24c6
commit
9484b3c098
12
README.md
Normal file
12
README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Jerry-DSL
|
||||||
|
|
||||||
|
一个
|
||||||
|
|
||||||
|
## src目录解析
|
||||||
|
|
||||||
|
- `Grammar` 语法解析器,验证语法及拆分语法
|
||||||
|
- `Output` 输出器,将解析的内容输出(并不执行)
|
||||||
|
- `Parser` 解析器,使用`Grammar`将内容解析成`Tokenizer`用的东西
|
||||||
|
- `Reader` 读取器,供`Tokenizer`读取使用
|
||||||
|
- `Token` 所有的Token
|
||||||
|
- `Tokenizer` Token生成器,生成Token用的
|
@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "q792602257/jerry_dsl",
|
"name": "jerryyan/dsl",
|
||||||
"description": "My DSL Thing",
|
"description": "My DSL Thing",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
|
"type": "library",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "q792602257",
|
"name": "q792602257",
|
||||||
@ -9,5 +10,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
|
"php": ">=7.1",
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"JerryYan\\DSL\\": "src"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
15
src/Grammar/Grammar.php
Normal file
15
src/Grammar/Grammar.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename Grammar.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:13
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Grammar;
|
||||||
|
|
||||||
|
|
||||||
|
class Grammar extends GrammarInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Grammar/GrammarInterface.php
Normal file
15
src/Grammar/GrammarInterface.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename GrammarInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:11
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Grammar;
|
||||||
|
|
||||||
|
|
||||||
|
abstract class GrammarInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
21
src/Output/CnTextOutput.php
Normal file
21
src/Output/CnTextOutput.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename CnTextOutput.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:33
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Output;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 又以中文形式重新输出一遍
|
||||||
|
* @package JerryYan\DSL\Output
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 16:12
|
||||||
|
*/
|
||||||
|
class CnTextOutput extends OutputInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Output/DiagramOutput.php
Normal file
15
src/Output/DiagramOutput.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename DiagramOutput.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:30
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Output;
|
||||||
|
|
||||||
|
|
||||||
|
class DiagramOutput extends OutputInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Output/HTMLOutput.php
Normal file
15
src/Output/HTMLOutput.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename HTMLOutput.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:09
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Output;
|
||||||
|
|
||||||
|
|
||||||
|
class HTMLOutput extends OutputInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Output/OutputInterface.php
Normal file
15
src/Output/OutputInterface.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename OutputInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:08
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Output;
|
||||||
|
|
||||||
|
|
||||||
|
abstract class OutputInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Parser/Parser.php
Normal file
15
src/Parser/Parser.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename Parser.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:35
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Parser;
|
||||||
|
|
||||||
|
|
||||||
|
class Parser extends ParserInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Parser/ParserInterface.php
Normal file
15
src/Parser/ParserInterface.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename ParserInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:35
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Parser;
|
||||||
|
|
||||||
|
|
||||||
|
abstract class ParserInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Reader/FileReader.php
Normal file
15
src/Reader/FileReader.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename FileReader.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:58
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Reader;
|
||||||
|
|
||||||
|
|
||||||
|
class FileReader extends ReaderInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
44
src/Reader/ReaderInterface.php
Normal file
44
src/Reader/ReaderInterface.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename ReaderInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:58
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Reader;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析器需要使用到的读取类
|
||||||
|
* @package JerryYan\DSL\Reader
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:37
|
||||||
|
*/
|
||||||
|
abstract class ReaderInterface
|
||||||
|
{
|
||||||
|
protected $currentLine = 0;
|
||||||
|
protected $currentPosition = 0;
|
||||||
|
protected $currentLinePosition = 0;
|
||||||
|
#abstract public function getNextChar(): ?string;
|
||||||
|
#abstract public function getCurrentToken(): ?string;
|
||||||
|
#abstract public function getNextToken(): ?string;
|
||||||
|
#abstract public function moveToNextToken(): ?string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳过当前行
|
||||||
|
* @return bool
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:43
|
||||||
|
*/
|
||||||
|
#abstract public function skipCurrentLine(): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从当前位置跳到结束位置
|
||||||
|
* @param string $end
|
||||||
|
* @return bool
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:43
|
||||||
|
*/
|
||||||
|
#abstract public function skipUntil(string $end="*/"): bool;
|
||||||
|
}
|
15
src/Reader/StreamReader.php
Normal file
15
src/Reader/StreamReader.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename StreamReader.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:58
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Reader;
|
||||||
|
|
||||||
|
|
||||||
|
class StreamReader extends ReaderInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
22
src/Token/Token.php
Normal file
22
src/Token/Token.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename Token.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:51
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token实体分类Enum
|
||||||
|
* @package JerryYan\DSL\Token
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:11
|
||||||
|
*/
|
||||||
|
final class Token
|
||||||
|
{
|
||||||
|
const AND = "And";
|
||||||
|
const OR = "Or";
|
||||||
|
}
|
15
src/Token/TokenAnd.php
Normal file
15
src/Token/TokenAnd.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenAnd.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:20
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
class TokenAnd
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
19
src/Token/TokenFactory.php
Normal file
19
src/Token/TokenFactory.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenFactory.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:48
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
class TokenFactory
|
||||||
|
{
|
||||||
|
/** @var array<string, string> Token类型及映射类 */
|
||||||
|
#private $tokenMap = [
|
||||||
|
# Token::AND => TokenAnd::class,
|
||||||
|
#];
|
||||||
|
|
||||||
|
}
|
15
src/Token/TokenInterface.php
Normal file
15
src/Token/TokenInterface.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 14:23
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
abstract class TokenInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
21
src/Token/TokenType.php
Normal file
21
src/Token/TokenType.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenType.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:04
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Token;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token分类Enum
|
||||||
|
* @package JerryYan\DSL\Token
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:04
|
||||||
|
*/
|
||||||
|
final class TokenType
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Tokenizer/Tokenizer.php
Normal file
15
src/Tokenizer/Tokenizer.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename Tokenizer.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:22
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Tokenizer;
|
||||||
|
|
||||||
|
|
||||||
|
class Tokenizer extends TokenizerInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
15
src/Tokenizer/TokenizerInterface.php
Normal file
15
src/Tokenizer/TokenizerInterface.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @filename TokenizerInterface.php
|
||||||
|
* @author Jerry Yan <792602257@qq.com>
|
||||||
|
* @date 2020/12/17 15:22
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace JerryYan\DSL\Tokenizer;
|
||||||
|
|
||||||
|
|
||||||
|
abstract class TokenizerInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user