UNPKG

@dbml/parse

Version:
209 lines (208 loc) 7.75 kB
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); }