UNPKG

cil-lexer

Version:
75 lines (74 loc) 4.83 kB
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>)[];