cbml
Version:
CBML Parser
118 lines (117 loc) • 1.92 kB
TypeScript
/**
* 语法树节点<!--{en}CBMLTree AST nodes are represented as Node objects-->
*/
export interface Node {
/**
* 节点类型
*/
type: string;
/**
* 节点在代码中的范围
*/
range?: [number, number];
/**
* 节点在源码中的位置
*/
loc?: SourceLocation | null;
}
/**
* 源码位置信息
*/
export interface SourceLocation {
/**
* 源码部分
*/
source: string | null;
/**
* 起始位置
*/
start: Position;
/**
* 结束位置
*/
end: Position;
}
/**
* 代码位置
*/
export interface Position {
/**
* 行号
*/
line: number;
/**
* 列号
*/
column: number;
}
/**
* 代码块所用语言
*/
export declare type Language = 'xml' | 'c' | 'pascal' | 'python' | 'lua' | 'cbml';
/**
* 属性
*/
export interface Attribute {
/**
* 属性值
*/
value: string;
/**
* 引号风格
*/
quoted: string | '' | '"' | "'";
}
/**
* 属性集合
*/
export interface Attributes {
[name: string]: Attribute;
}
/**
* 基础元素
*/
export interface Element extends Node {
tag: string;
attributes: Attributes;
language: Language;
}
/**
* 容器元素
*/
export interface ContainerElement extends Element {
body: Node[];
}
/**
* CBML 根元素
*/
export interface CBMLElement extends ContainerElement {
tag: '#cbml';
language: 'cbml';
type: 'CBMLElement';
}
/**
* 复合元素
*/
export interface BlockElement extends ContainerElement {
type: 'BlockElement';
}
/**
* 复合注释元素
*/
export interface CommentElement extends ContainerElement {
type: 'CommentElement';
}
/**
* 单体元素
*/
export interface VoidElement extends Element {
type: 'VoidElement';
}
/**
* 文本元素
*/
export interface TextNode extends Node {
type: 'TextNode';
content: string;
}