Перейти к содержимому
docs.
WORKSPACE

Документации проектов

Открыть каталог проектов
Localzet ServerАсинхронный PHP-серверTriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный язык✓invariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог

interpreter — API

src/Lexer.ts

export class Lexer {
private regex = /\s*(=>|{|}|<|>|<\/|\/>|::|\$|[A-Za-z_][A-Za-z_0-9]*|\d+|\S)\s*/g;
public tokenize(code: string): Token[] {
let result: Token[] = [];
let match;
while (match = this.regex.exec(code)) {
let token: Token;
if (match[1] === '<' || match[1] === '>' || match[1] === '</' || match[1] === '/>') {
token = { type: TokenType.XMLTag, value: match[1] };
} else if (match[1] === '::') {
token = { type: TokenType.TypeScriptNamespace, value: match[1] };
} else if (match[1] === '$') {
token = { type: TokenType.PHPVariable, value: match[1] };
} else if (!isNaN(Number(match[1]))) {
token = { type: TokenType.Number, value: Number(match[1]) };
} else {
token = { type: TokenType.Identifier, value: match[1] };
}
result.push(token);
}
return result;
}
}

src/Lexer.ts

export enum TokenType {
XMLTag = 'XMLTag',
TypeScriptNamespace = 'TypeScriptNamespace',
PHPVariable = 'PHPVariable',
Number = 'Number',
Identifier = 'Identifier',
}

src/types.d.ts

export type Token = {
type: TokenType;
value: string | number;
};

src/types.d.ts

export type ASTNode = {
type: string;
children?: ASTNode[];
};

src/types.d.ts

export type ProgramNode = ASTNode & {
type: 'Program';
body: StatementNode[];
};

src/types.d.ts

export type StatementNode = FunctionDeclarationNode | ClassDeclarationNode | VariableAssignmentNode | EchoStatementNode | ReturnStatementNode | LoopStatementNode | ConditionalStatementNode | TryStatementNode | ModuleImportNode;

src/types.d.ts

export type ExpressionNode = BinaryExpressionNode | UnaryExpressionNode | ConditionalExpressionNode | ArrayExpressionNode | ObjectExpressionNode | CallExpressionNode | MemberExpressionNode | IdentifierNode | LiteralNode;

src/types.d.ts

export type FunctionDeclarationNode = ASTNode & {
type: 'FunctionDeclaration';
name: IdentifierNode;
params: IdentifierNode[];
body: StatementNode[];
};

src/types.d.ts

export type ClassDeclarationNode = ASTNode & {
type: 'ClassDeclaration';
name: IdentifierNode;
properties: PropertyNode[];
methods: FunctionDeclarationNode[];
};

src/types.d.ts

export type PropertyNode = ASTNode & {
type: 'Property';
name: IdentifierNode;
value: ExpressionNode;
};

src/types.d.ts

export type VariableAssignmentNode = ASTNode & {
type: 'VariableAssignment';
name: IdentifierNode;
value: ExpressionNode;
};

src/types.d.ts

export type ModuleImportNode = ASTNode & {
type: 'ModuleImport';
moduleName: string;
};

src/types.d.ts

export type EchoStatementNode = ASTNode & {
type: 'EchoStatement';
expressions: ExpressionNode[];
};

src/types.d.ts

export type ReturnStatementNode = ASTNode & {
type: 'ReturnStatement';
argument: ExpressionNode;
};

src/types.d.ts

export type BinaryExpressionNode = ASTNode & {
type: 'BinaryExpression';
operator: string;
left: ExpressionNode;
right: ExpressionNode;
};

src/types.d.ts

export type UnaryExpressionNode = ASTNode & {
type: 'UnaryExpression';
operator: string;
argument: ExpressionNode;
};

src/types.d.ts

export type ConditionalExpressionNode = ASTNode & {
type: 'ConditionalExpression';
test: ExpressionNode;
consequent: ExpressionNode;
alternate: ExpressionNode;
};

src/types.d.ts

export type ArrayExpressionNode = ASTNode & {
type: 'ArrayExpression';
elements: ExpressionNode[];
};

src/types.d.ts

export type ObjectExpressionNode = ASTNode & {
type: 'ObjectExpression';
properties: PropertyNode[];
};

src/types.d.ts

export type CallExpressionNode = ASTNode & {
type: 'CallExpression';
callee: ExpressionNode;
arguments: ExpressionNode[];
};

src/types.d.ts

export type MemberExpressionNode = ASTNode & {
type: 'MemberExpression';
object: ExpressionNode;
property: ExpressionNode;
};

src/types.d.ts

export type IdentifierNode = ASTNode & {
type: 'Identifier';
name: string;
};

src/types.d.ts

export type LiteralNode = ASTNode & {
type: 'Literal';
value: string | number | boolean | null;
};

src/types.d.ts

export type LoopStatementNode = ASTNode & {
type: 'LoopStatement';
init: ExpressionNode;
test: ExpressionNode;
update: ExpressionNode;
body: StatementNode;
};

src/types.d.ts

export type ConditionalStatementNode = ASTNode & {
type: 'ConditionalStatement';
test: ExpressionNode;
consequent: StatementNode;
alternate: StatementNode;
};

src/types.d.ts

export type TryStatementNode = ASTNode & {
type: 'TryStatement';
block: StatementNode;
handler: CatchClauseNode;
};

src/types.d.ts

export type CatchClauseNode = ASTNode & {
type: 'CatchClause';
param: IdentifierNode;
body: StatementNode;
};

src/types.d.ts

export type AST = ProgramNode;