wgsl_reflect
Version:
WGSL Parser and Reflection library
313 lines (312 loc) • 9.21 kB
TypeScript
export declare enum TokenClass {
token = 0,
keyword = 1,
reserved = 2
}
export declare class TokenType {
name: string;
type: TokenClass;
rule: RegExp | string;
constructor(name: string, type: TokenClass, rule: RegExp | string);
toString(): string;
}
export declare class TokenTypes {
static readonly none: TokenType;
static readonly eof: TokenType;
static readonly reserved: {
asm: TokenType;
bf16: TokenType;
do: TokenType;
enum: TokenType;
f16: TokenType;
f64: TokenType;
handle: TokenType;
i8: TokenType;
i16: TokenType;
i64: TokenType;
mat: TokenType;
premerge: TokenType;
regardless: TokenType;
typedef: TokenType;
u8: TokenType;
u16: TokenType;
u64: TokenType;
unless: TokenType;
using: TokenType;
vec: TokenType;
void: TokenType;
};
static readonly keywords: {
array: TokenType;
atomic: TokenType;
bool: TokenType;
f32: TokenType;
i32: TokenType;
mat2x2: TokenType;
mat2x3: TokenType;
mat2x4: TokenType;
mat3x2: TokenType;
mat3x3: TokenType;
mat3x4: TokenType;
mat4x2: TokenType;
mat4x3: TokenType;
mat4x4: TokenType;
ptr: TokenType;
sampler: TokenType;
sampler_comparison: TokenType;
struct: TokenType;
texture_1d: TokenType;
texture_2d: TokenType;
texture_2d_array: TokenType;
texture_3d: TokenType;
texture_cube: TokenType;
texture_cube_array: TokenType;
texture_multisampled_2d: TokenType;
texture_storage_1d: TokenType;
texture_storage_2d: TokenType;
texture_storage_2d_array: TokenType;
texture_storage_3d: TokenType;
texture_depth_2d: TokenType;
texture_depth_2d_array: TokenType;
texture_depth_cube: TokenType;
texture_depth_cube_array: TokenType;
texture_depth_multisampled_2d: TokenType;
texture_external: TokenType;
u32: TokenType;
vec2: TokenType;
vec3: TokenType;
vec4: TokenType;
bitcast: TokenType;
block: TokenType;
break: TokenType;
case: TokenType;
continue: TokenType;
continuing: TokenType;
default: TokenType;
diagnostic: TokenType;
discard: TokenType;
else: TokenType;
enable: TokenType;
fallthrough: TokenType;
false: TokenType;
fn: TokenType;
for: TokenType;
function: TokenType;
if: TokenType;
let: TokenType;
const: TokenType;
loop: TokenType;
while: TokenType;
private: TokenType;
read: TokenType;
read_write: TokenType;
return: TokenType;
requires: TokenType;
storage: TokenType;
switch: TokenType;
true: TokenType;
alias: TokenType;
type: TokenType;
uniform: TokenType;
var: TokenType;
override: TokenType;
workgroup: TokenType;
write: TokenType;
r8unorm: TokenType;
r8snorm: TokenType;
r8uint: TokenType;
r8sint: TokenType;
r16uint: TokenType;
r16sint: TokenType;
r16float: TokenType;
rg8unorm: TokenType;
rg8snorm: TokenType;
rg8uint: TokenType;
rg8sint: TokenType;
r32uint: TokenType;
r32sint: TokenType;
r32float: TokenType;
rg16uint: TokenType;
rg16sint: TokenType;
rg16float: TokenType;
rgba8unorm: TokenType;
rgba8unorm_srgb: TokenType;
rgba8snorm: TokenType;
rgba8uint: TokenType;
rgba8sint: TokenType;
bgra8unorm: TokenType;
bgra8unorm_srgb: TokenType;
rgb10a2unorm: TokenType;
rg11b10float: TokenType;
rg32uint: TokenType;
rg32sint: TokenType;
rg32float: TokenType;
rgba16uint: TokenType;
rgba16sint: TokenType;
rgba16float: TokenType;
rgba32uint: TokenType;
rgba32sint: TokenType;
rgba32float: TokenType;
static_assert: TokenType;
};
static readonly tokens: {
decimal_float_literal: TokenType;
hex_float_literal: TokenType;
int_literal: TokenType;
uint_literal: TokenType;
name: TokenType;
ident: TokenType;
and: TokenType;
and_and: TokenType;
arrow: TokenType;
attr: TokenType;
forward_slash: TokenType;
bang: TokenType;
bracket_left: TokenType;
bracket_right: TokenType;
brace_left: TokenType;
brace_right: TokenType;
colon: TokenType;
comma: TokenType;
equal: TokenType;
equal_equal: TokenType;
not_equal: TokenType;
greater_than: TokenType;
greater_than_equal: TokenType;
shift_right: TokenType;
less_than: TokenType;
less_than_equal: TokenType;
shift_left: TokenType;
modulo: TokenType;
minus: TokenType;
minus_minus: TokenType;
period: TokenType;
plus: TokenType;
plus_plus: TokenType;
or: TokenType;
or_or: TokenType;
paren_left: TokenType;
paren_right: TokenType;
semicolon: TokenType;
star: TokenType;
tilde: TokenType;
underscore: TokenType;
xor: TokenType;
plus_equal: TokenType;
minus_equal: TokenType;
times_equal: TokenType;
division_equal: TokenType;
modulo_equal: TokenType;
and_equal: TokenType;
or_equal: TokenType;
xor_equal: TokenType;
shift_right_equal: TokenType;
shift_left_equal: TokenType;
};
static readonly simpleTokens: {
"@": TokenType;
"{": TokenType;
"}": TokenType;
":": TokenType;
",": TokenType;
"(": TokenType;
")": TokenType;
";": TokenType;
};
static readonly literalTokens: {
"&": TokenType;
"&&": TokenType;
"->": TokenType;
"/": TokenType;
"!": TokenType;
"[": TokenType;
"]": TokenType;
"=": TokenType;
"==": TokenType;
"!=": TokenType;
">": TokenType;
">=": TokenType;
">>": TokenType;
"<": TokenType;
"<=": TokenType;
"<<": TokenType;
"%": TokenType;
"-": TokenType;
"--": TokenType;
".": TokenType;
"+": TokenType;
"++": TokenType;
"|": TokenType;
"||": TokenType;
"*": TokenType;
"~": TokenType;
_: TokenType;
"^": TokenType;
"+=": TokenType;
"-=": TokenType;
"*=": TokenType;
"/=": TokenType;
"%=": TokenType;
"&=": TokenType;
"|=": TokenType;
"^=": TokenType;
">>=": TokenType;
"<<=": TokenType;
};
static readonly regexTokens: {
decimal_float_literal: TokenType;
hex_float_literal: TokenType;
int_literal: TokenType;
uint_literal: TokenType;
ident: TokenType;
};
static readonly storage_class: TokenType[];
static readonly access_mode: TokenType[];
static readonly sampler_type: TokenType[];
static readonly sampled_texture_type: TokenType[];
static readonly multisampled_texture_type: TokenType[];
static readonly storage_texture_type: TokenType[];
static readonly depth_texture_type: TokenType[];
static readonly texture_external_type: TokenType[];
static readonly any_texture_type: TokenType[];
static readonly texel_format: TokenType[];
static readonly const_literal: TokenType[];
static readonly literal_or_ident: TokenType[];
static readonly element_count_expression: TokenType[];
static readonly template_types: TokenType[];
static readonly attribute_name: TokenType[];
static readonly assignment_operators: TokenType[];
static readonly increment_operators: TokenType[];
}
export declare class Token {
readonly type: TokenType;
readonly lexeme: string;
readonly line: number;
readonly start: number;
readonly end: number;
constructor(type: TokenType, lexeme: string, line: number, start: number, end: number);
toString(): string;
isTemplateType(): boolean;
isArrayType(): boolean;
isArrayOrTemplateType(): boolean;
}
export declare class WgslScanner {
private _source;
private _tokens;
private _start;
private _current;
private _line;
constructor(source?: string);
scanTokens(): Token[];
scanToken(): boolean;
_findType(lexeme: string): TokenType;
_match(lexeme: string, rule: RegExp): boolean;
_isAtEnd(): boolean;
_isAlpha(c: string): boolean;
_isNumeric(c: string): boolean;
_isAlphaNumeric(c: string): boolean;
_isWhitespace(c: string): boolean;
_advance(amount?: number): string;
_peekAhead(offset?: number): string;
_addToken(type: TokenType): void;
}