cil-lexer
Version:
75 lines (74 loc) • 4.83 kB
TypeScript
import { ReadonlyArray2, Nullable, CodePoint as C } from "wiinuk-extensions";
import { Combinator } from "tsparsec";
import { Tag, KeywordTag, InstrTag, DelimiterTag, DirectiveTag } from "./tag.g";
import * as bigint from "big-integer";
export declare const enum IntStyle {
Decimal = 0,
Hex = 1,
}
export interface Location {
readonly source: Nullable<string>;
readonly startLine: number;
readonly startColumn: number;
readonly endLine: number;
readonly endColumn: number;
}
export interface Token<TType extends string, TTag extends Tag> extends Location {
readonly type: TType;
readonly tag: TTag;
readonly trailingTrivia: string;
}
export interface Delimiter<TTag extends DelimiterTag> extends Token<"Delimiter", TTag> {
}
export interface Keyword<TTag extends KeywordTag> extends Token<"Keyword", TTag> {
}
export interface Directive<TTag extends DirectiveTag> extends Token<"Directive", TTag> {
}
export interface Instr<TTag extends InstrTag> extends Token<"Instr", TTag> {
}
export interface Id extends Token<"Id", Tag.Id> {
readonly value: string;
}
export interface DottedName extends Token<"DottedName", Tag.DottedName> {
readonly value: ReadonlyArray2<string>;
}
export interface QString extends Token<"QString", Tag.QString> {
readonly value: string;
}
export interface SQString extends Token<"SQString", Tag.SQString> {
readonly value: string;
}
export interface Int32 extends Token<"Int32", Tag.Int32> {
readonly value: number;
readonly style: IntStyle;
readonly raw: string;
}
export interface Int64 extends Token<"Int64", Tag.Int64> {
readonly value: bigint.BigInteger;
readonly style: IntStyle;
readonly raw: string;
}
export interface Float64 extends Token<"Float64", Tag.Float64> {
readonly value: number;
}
export interface HexByte extends Token<"HexByte", Tag.HexByte> {
readonly value: number;
readonly raw: string;
}
export declare type KnownToken = Delimiter<DelimiterTag> | Instr<InstrTag> | Keyword<KeywordTag> | Directive<DirectiveTag> | Id | DottedName | QString | SQString | Int32 | Int64 | Float64 | HexByte;
export declare namespace Token {
function delimiter<TTag extends DelimiterTag>(source: Nullable<string>, startLine: number, startColumn: number, value: TTag, endLine: number, endColumn: number, trailingTrivia: string): Delimiter<TTag>;
function instr<TTag extends InstrTag>(source: Nullable<string>, startLine: number, startColumn: number, value: TTag, endLine: number, endColumn: number, trailingTrivia: string): Instr<TTag>;
function keyword<TTag extends KeywordTag>(source: Nullable<string>, startLine: number, startColumn: number, value: TTag, endLine: number, endColumn: number, trailingTrivia: string): Keyword<TTag>;
function directive<TTag extends DirectiveTag>(source: Nullable<string>, startLine: number, startColumn: number, value: TTag, endLine: number, endColumn: number, trailingTrivia: string): Directive<TTag>;
function id(source: Nullable<string>, startLine: number, startColumn: number, value: string, endLine: number, endColumn: number, trailingTrivia: string): Id;
function dottedName(source: Nullable<string>, startLine: number, startColumn: number, value: ReadonlyArray2<string>, endLine: number, endColumn: number, trailingTrivia: string): DottedName;
function qstring(source: Nullable<string>, startLine: number, startColumn: number, value: string, endLine: number, endColumn: number, trailingTrivia: string): QString;
function sqstring(source: Nullable<string>, startLine: number, startColumn: number, value: string, endLine: number, endColumn: number, trailingTrivia: string): SQString;
function int32(source: Nullable<string>, startLine: number, startColumn: number, value: number, style: IntStyle, raw: string, endLine: number, endColumn: number, trailingTrivia: string): Int32;
function int64(source: Nullable<string>, startLine: number, startColumn: number, value: bigint.BigInteger, style: IntStyle, raw: string, endLine: number, endColumn: number, trailingTrivia: string): Int64;
function float64(source: Nullable<string>, startLine: number, startColumn: number, value: number, endLine: number, endColumn: number, trailingTrivia: string): Float64;
function hexbyte(source: Nullable<string>, startLine: number, startColumn: number, value: number, raw: string, endLine: number, endColumn: number, trailingTrivia: string): HexByte;
}
export declare const hexbyteAndTrailingTrivias0: Combinator<C, HexByte>;
export declare function parse(string: string, source?: Nullable<string>): (Id | DottedName | QString | SQString | Int32 | Int64 | Float64 | HexByte | Delimiter<DelimiterTag> | Instr<InstrTag> | Keyword<KeywordTag> | Directive<DirectiveTag>)[];