@dbml/parse
Version:
> TODO: description
209 lines (208 loc) • 7.75 kB
TypeScript
import { SyntaxToken } from '../lexer/tokens';
import { NodeSymbol } from '../analyzer/symbol/symbols';
import { Position } from '../types';
export type SyntaxNodeId = number;
export declare class SyntaxNodeIdGenerator {
private id;
reset(): void;
nextId(): SyntaxNodeId;
}
export declare class SyntaxNode {
id: Readonly<SyntaxNodeId>;
kind: SyntaxNodeKind;
startPos: Readonly<Position>;
start: Readonly<number>;
fullStart: Readonly<number>;
endPos: Readonly<Position>;
end: Readonly<number>;
fullEnd: Readonly<number>;
symbol?: NodeSymbol;
referee?: NodeSymbol;
constructor(id: SyntaxNodeId, kind: SyntaxNodeKind, args: Readonly<SyntaxToken | SyntaxNode | undefined>[]);
}
export declare enum SyntaxNodeKind {
PROGRAM = "<program>",
ELEMENT_DECLARATION = "<element-declaration>",
ATTRIBUTE = "<attribute>",
IDENTIFIER_STREAM = "<identifer-stream>",
LITERAL = "<literal>",
VARIABLE = "<variable>",
PREFIX_EXPRESSION = "<prefix-expression>",
INFIX_EXPRESSION = "<infix-expression>",
POSTFIX_EXPRESSION = "<postfix-expression>",
FUNCTION_EXPRESSION = "<function-expression>",
FUNCTION_APPLICATION = "<function-application>",
BLOCK_EXPRESSION = "<block-expression>",
LIST_EXPRESSION = "<list-expression>",
TUPLE_EXPRESSION = "<tuple-expression>",
CALL_EXPRESSION = "<call-expression>",
PRIMARY_EXPRESSION = "<primary-expression>",
GROUP_EXPRESSION = "<group-expression>",
DUMMY = "<dummy>",
ARRAY = "<array>"
}
export declare class ProgramNode extends SyntaxNode {
body: ElementDeclarationNode[];
eof?: SyntaxToken;
constructor({ body, eof }: {
body?: ElementDeclarationNode[];
eof?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class ElementDeclarationNode extends SyntaxNode {
type?: SyntaxToken;
name?: NormalExpressionNode;
as?: SyntaxToken;
alias?: NormalExpressionNode;
attributeList?: ListExpressionNode;
bodyColon?: SyntaxToken;
parent?: ElementDeclarationNode | ProgramNode;
body?: FunctionApplicationNode | BlockExpressionNode;
constructor({ type, name, as, alias, attributeList, bodyColon, body, }: {
type?: SyntaxToken;
name?: NormalExpressionNode;
as?: SyntaxToken;
alias?: NormalExpressionNode;
attributeList?: ListExpressionNode;
bodyColon?: SyntaxToken;
body?: BlockExpressionNode | FunctionApplicationNode;
}, id: SyntaxNodeId);
}
export declare class IdentiferStreamNode extends SyntaxNode {
identifiers: SyntaxToken[];
constructor({ identifiers }: {
identifiers?: SyntaxToken[];
}, id: SyntaxNodeId);
}
export declare class AttributeNode extends SyntaxNode {
name?: IdentiferStreamNode | PrimaryExpressionNode;
colon?: SyntaxToken;
value?: NormalExpressionNode | IdentiferStreamNode;
constructor({ name, colon, value, }: {
name?: IdentiferStreamNode | PrimaryExpressionNode;
colon?: SyntaxToken;
value?: NormalExpressionNode | IdentiferStreamNode;
}, id: SyntaxNodeId);
}
export type NormalExpressionNode = PrefixExpressionNode | InfixExpressionNode | PostfixExpressionNode | BlockExpressionNode | ListExpressionNode | TupleExpressionNode | CallExpressionNode | PrimaryExpressionNode | FunctionExpressionNode | DummyNode | ArrayNode;
export type ExpressionNode = ElementDeclarationNode | NormalExpressionNode | FunctionApplicationNode;
export declare class PrefixExpressionNode extends SyntaxNode {
op?: SyntaxToken;
expression?: NormalExpressionNode;
constructor({ op, expression }: {
op?: SyntaxToken;
expression?: NormalExpressionNode;
}, id: SyntaxNodeId);
}
export declare class InfixExpressionNode extends SyntaxNode {
op?: SyntaxToken;
leftExpression?: NormalExpressionNode;
rightExpression?: NormalExpressionNode;
constructor({ op, leftExpression, rightExpression, }: {
op?: SyntaxToken;
leftExpression?: NormalExpressionNode;
rightExpression?: NormalExpressionNode;
}, id: SyntaxNodeId);
}
export declare class PostfixExpressionNode extends SyntaxNode {
op?: SyntaxToken;
expression?: NormalExpressionNode;
constructor({ op, expression }: {
op?: SyntaxToken;
expression?: NormalExpressionNode;
}, id: SyntaxNodeId);
}
export declare class FunctionExpressionNode extends SyntaxNode {
value?: SyntaxToken;
constructor({ value }: {
value?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class FunctionApplicationNode extends SyntaxNode {
callee?: ExpressionNode;
args: ExpressionNode[];
constructor({ callee, args }: {
callee?: ExpressionNode;
args?: ExpressionNode[];
}, id: SyntaxNodeId);
}
export declare class BlockExpressionNode extends SyntaxNode {
blockOpenBrace?: SyntaxToken;
body: (ElementDeclarationNode | FunctionApplicationNode)[];
blockCloseBrace?: SyntaxToken;
constructor({ blockOpenBrace, body, blockCloseBrace, }: {
blockOpenBrace?: SyntaxToken;
body?: (ElementDeclarationNode | FunctionApplicationNode)[];
blockCloseBrace?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class ListExpressionNode extends SyntaxNode {
listOpenBracket?: SyntaxToken;
elementList: AttributeNode[];
commaList: SyntaxToken[];
listCloseBracket?: SyntaxToken;
constructor({ listOpenBracket, elementList, commaList, listCloseBracket, }: {
listOpenBracket?: SyntaxToken;
elementList?: AttributeNode[];
commaList?: SyntaxToken[];
listCloseBracket?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class TupleExpressionNode extends SyntaxNode {
tupleOpenParen?: SyntaxToken;
elementList: NormalExpressionNode[];
commaList: SyntaxToken[];
tupleCloseParen?: SyntaxToken;
constructor({ tupleOpenParen, elementList, commaList, tupleCloseParen, }: {
tupleOpenParen?: SyntaxToken;
elementList?: NormalExpressionNode[];
commaList?: SyntaxToken[];
tupleCloseParen?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class GroupExpressionNode extends TupleExpressionNode {
constructor({ groupOpenParen, expression, groupCloseParen, }: {
groupOpenParen?: SyntaxToken;
expression?: NormalExpressionNode;
groupCloseParen?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class CallExpressionNode extends SyntaxNode {
callee?: NormalExpressionNode;
argumentList?: TupleExpressionNode;
constructor({ callee, argumentList, }: {
callee?: NormalExpressionNode;
argumentList?: TupleExpressionNode;
}, id: SyntaxNodeId);
}
export declare class LiteralNode extends SyntaxNode {
literal?: SyntaxToken;
constructor({ literal }: {
literal?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class VariableNode extends SyntaxNode {
variable?: SyntaxToken;
constructor({ variable }: {
variable?: SyntaxToken;
}, id: SyntaxNodeId);
}
export declare class PrimaryExpressionNode extends SyntaxNode {
expression?: LiteralNode | VariableNode;
constructor({ expression }: {
expression?: LiteralNode | VariableNode;
}, id: SyntaxNodeId);
}
export declare class DummyNode extends SyntaxNode {
constructor({ pre }: {
pre: Readonly<SyntaxNode> | Readonly<SyntaxToken>;
}, id: SyntaxNodeId);
}
export declare class ArrayNode extends SyntaxNode {
array?: NormalExpressionNode;
indexer?: ListExpressionNode;
constructor({ expression, indexer }: {
expression?: NormalExpressionNode;
indexer: ListExpressionNode;
}, id: SyntaxNodeId);
}