77 lines
2.8 KiB
TypeScript
77 lines
2.8 KiB
TypeScript
![]() |
|
||
|
import { RegExpUtility } from "../RegExpUtitlity";
|
||
|
import { Lexer } from "./Lexer";
|
||
|
import { LexerMatcher } from "./LexerMatcher";
|
||
|
import { LexerMatcherLibrary } from "./LexerMatcherLibrary";
|
||
|
import { LexerType } from "./LexerType";
|
||
|
|
||
|
export type PHP_KEYWORD = "PHP_KEYWORD";
|
||
|
export type PHP_START = "PHP_START";
|
||
|
export type PHP_END = "PHP_END";
|
||
|
export type PHP_CONSTANT = "PHP_CONSTANT";
|
||
|
|
||
|
export type PHPLexerType = LexerType | PHP_KEYWORD | PHP_START | PHP_END | PHP_CONSTANT;
|
||
|
|
||
|
export class PHPLexer extends Lexer
|
||
|
{
|
||
|
static readonly predefined =
|
||
|
[
|
||
|
"NULL","E_CORE_ERROR","Exception","PATHINFO_FILENAME","JSON_PRETTY_PRINT","__DIR__",
|
||
|
"ENT_QUOTES","PREG_OFFSET_CAPTURE","PREG_SPLIT_DELIM_CAPTURE","PREG_SPLIT_NO_EMPTY",
|
||
|
"PHP_INT_MAX","SEEK_CUR","SEEK_SET",
|
||
|
|
||
|
"CURLOPT_URL","CURLOPT_RETURNTRANSFER","CURLOPT_USERAGENT","E_USER_ERROR","E_USER_NOTICE","E_USER_WARNING",
|
||
|
|
||
|
"JSON_ERROR_NONE", "JSON_ERROR_DEPTH", "JSON_ERROR_STATE_MISMATCH", "JSON_ERROR_CTRL_CHAR",
|
||
|
"JSON_ERROR_SYNTAX", "JSON_ERROR_UTF8", "JSON_ERROR_RECURSION", "JSON_ERROR_INF_OR_NAN",
|
||
|
"JSON_ERROR_UNSUPPORTED_TYPE", "JSON_ERROR_INVALID_PROPERTY_NAME", "JSON_ERROR_UTF16"
|
||
|
]
|
||
|
|
||
|
static readonly PHP_CONSTANT:PHP_CONSTANT = "PHP_CONSTANT";
|
||
|
static readonly PHP_CONSTANT_MATCHER =
|
||
|
new LexerMatcher( PHPLexer.PHP_CONSTANT, RegExpUtility.createFromList( PHPLexer.predefined ) );
|
||
|
|
||
|
static readonly PHP_KEYWORD:PHP_KEYWORD = "PHP_KEYWORD";
|
||
|
|
||
|
static readonly PHP_KEYWORD_MATCHER =
|
||
|
new LexerMatcher( PHPLexer.PHP_KEYWORD, /include_once|include|require_once|require|extends|function|const/ );
|
||
|
|
||
|
static readonly PHP_START:PHP_START = "PHP_START";
|
||
|
|
||
|
static readonly PHP_START_MATCHER =
|
||
|
new LexerMatcher( PHPLexer.PHP_START, /\<\?php/ );
|
||
|
|
||
|
static readonly PHP_END:PHP_END = "PHP_END";
|
||
|
|
||
|
static readonly PHP_END_MATCHER =
|
||
|
new LexerMatcher( PHPLexer.PHP_END, /\?\>/ );
|
||
|
|
||
|
constructor()
|
||
|
{
|
||
|
super();
|
||
|
|
||
|
this.addAllMatchers(
|
||
|
LexerMatcherLibrary.SINGLE_LINE_COMMENT_MATCHER,
|
||
|
LexerMatcherLibrary.MULTI_LINE_COMMENT_MATCHER,
|
||
|
LexerMatcherLibrary.DOUBLE_QUOTED_STRING_MATCHER,
|
||
|
LexerMatcherLibrary.SINGLE_QUOTED_STRING_MATCHER,
|
||
|
PHPLexer.PHP_CONSTANT_MATCHER,
|
||
|
PHPLexer.PHP_START_MATCHER,
|
||
|
PHPLexer.PHP_END_MATCHER,
|
||
|
LexerMatcherLibrary.NUMBER_MATCHER,
|
||
|
LexerMatcherLibrary.NULL_MATCHER,
|
||
|
LexerMatcherLibrary.BOOL_MATCHER,
|
||
|
LexerMatcherLibrary.BREAK_MATCHER,
|
||
|
LexerMatcherLibrary.WHITESPACE_MATCHER,
|
||
|
LexerMatcherLibrary.LOGIC_MATCHER,
|
||
|
LexerMatcherLibrary.BRACKET_MATCHER,
|
||
|
LexerMatcherLibrary.ACCESS_MODIFIER_MATCHER,
|
||
|
LexerMatcherLibrary.CLASS_MATCHER,
|
||
|
PHPLexer.PHP_KEYWORD_MATCHER,
|
||
|
LexerMatcherLibrary.OPERATOR_MATCHER,
|
||
|
LexerMatcherLibrary.PHPWORD_MATCHER,
|
||
|
LexerMatcherLibrary.ANY_SYMBOL_MATCHER
|
||
|
);
|
||
|
|
||
|
}
|
||
|
}
|