bds.js
Version:
A simple interpreter written to simulate and run BDScript Language in JavaScript
63 lines (62 loc) • 1.67 kB
TypeScript
declare type TokenString = {
type: "string";
value: string;
};
declare type TokenNumber = {
type: "number";
value: number;
};
declare type TokenCall = {
type: "call";
value: string;
child: TokenArgument[];
};
declare type TokenOpen = {
type: "open";
};
declare type TokenClose = {
type: "close";
};
declare type TokenNewArg = {
type: "newArg";
};
declare type TokenOperator = {
type: "operator";
value: "==" | "!=" | ">=" | "<=" | ">" | "<" | "!";
};
declare type TokenArgument = {
type: "argument";
child: Token[];
};
declare type TokenProgram = {
type: "program";
child: Token[];
};
declare type Token = {
pos: number;
line: number;
} & (TokenArgument | TokenProgram | TokenString | TokenNumber | TokenCall | TokenOpen | TokenClose | TokenNewArg | TokenOperator);
declare class Lexer {
input: string;
pos: number;
line: number;
col: number;
escape_c: boolean;
constructor(input: string);
main(): Token[];
peek(offset?: number): string;
next(): string;
eof(): boolean;
isOperator(x: string): boolean;
isSyntax(c: string): boolean;
isNumber(x: string): boolean;
parseOperator(x: string): Token;
validateCall(c: string): boolean;
parseCall(): Token;
validateString(c: string): boolean;
parseString(): Token;
readInput(validator: (c: string) => boolean): string;
advance(): Token;
clean(tokens: Token[]): Token[];
}
export { Lexer, Token, TokenString, TokenNumber, TokenArgument, TokenProgram, TokenCall, TokenOpen, TokenClose, TokenNewArg, TokenOperator };