parse.d.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { Tree, TreeFragment, NodeSet, NodeType, NodePropSource, Input, PartialParse, Parser, ParseWrapper } from "@lezer/common";
  2. import { Stack } from "./stack";
  3. import { Tokenizer, ExternalTokenizer, CachedToken, InputStream } from "./token";
  4. declare class FragmentCursor {
  5. readonly fragments: readonly TreeFragment[];
  6. readonly nodeSet: NodeSet;
  7. i: number;
  8. fragment: TreeFragment | null;
  9. safeFrom: number;
  10. safeTo: number;
  11. trees: Tree[];
  12. start: number[];
  13. index: number[];
  14. nextStart: number;
  15. constructor(fragments: readonly TreeFragment[], nodeSet: NodeSet);
  16. nextFragment(): void;
  17. nodeAt(pos: number): Tree | null;
  18. }
  19. declare class TokenCache {
  20. readonly stream: InputStream;
  21. tokens: CachedToken[];
  22. mainToken: CachedToken | null;
  23. actions: number[];
  24. constructor(parser: LRParser, stream: InputStream);
  25. getActions(stack: Stack): number[];
  26. getMainToken(stack: Stack): CachedToken;
  27. updateCachedToken(token: CachedToken, tokenizer: Tokenizer, stack: Stack): void;
  28. putAction(action: number, token: number, end: number, index: number): number;
  29. addActions(stack: Stack, token: number, end: number, index: number): number;
  30. }
  31. export declare class Parse implements PartialParse {
  32. readonly parser: LRParser;
  33. readonly input: Input;
  34. readonly ranges: readonly {
  35. from: number;
  36. to: number;
  37. }[];
  38. stacks: Stack[];
  39. recovering: number;
  40. fragments: FragmentCursor | null;
  41. nextStackID: number;
  42. minStackPos: number;
  43. reused: Tree[];
  44. stream: InputStream;
  45. tokens: TokenCache;
  46. topTerm: number;
  47. stoppedAt: null | number;
  48. constructor(parser: LRParser, input: Input, fragments: readonly TreeFragment[], ranges: readonly {
  49. from: number;
  50. to: number;
  51. }[]);
  52. get parsedPos(): number;
  53. advance(): Tree;
  54. stopAt(pos: number): void;
  55. private advanceStack;
  56. private advanceFully;
  57. private runRecovery;
  58. stackToTree(stack: Stack): Tree;
  59. private stackID;
  60. }
  61. export declare class Dialect {
  62. readonly source: string | undefined;
  63. readonly flags: readonly boolean[];
  64. readonly disabled: null | Uint8Array;
  65. constructor(source: string | undefined, flags: readonly boolean[], disabled: null | Uint8Array);
  66. allows(term: number): boolean;
  67. }
  68. export declare class ContextTracker<T> {
  69. constructor(spec: {
  70. start: T;
  71. shift?(context: T, term: number, stack: Stack, input: InputStream): T;
  72. reduce?(context: T, term: number, stack: Stack, input: InputStream): T;
  73. reuse?(context: T, node: Tree, stack: Stack, input: InputStream): T;
  74. hash?(context: T): number;
  75. strict?: boolean;
  76. });
  77. }
  78. export interface ParserConfig {
  79. props?: readonly NodePropSource[];
  80. top?: string;
  81. dialect?: string;
  82. tokenizers?: {
  83. from: ExternalTokenizer;
  84. to: ExternalTokenizer;
  85. }[];
  86. specializers?: {
  87. from: (value: string, stack: Stack) => number;
  88. to: (value: string, stack: Stack) => number;
  89. }[];
  90. contextTracker?: ContextTracker<any>;
  91. strict?: boolean;
  92. wrap?: ParseWrapper;
  93. bufferLength?: number;
  94. }
  95. export declare class LRParser extends Parser {
  96. readonly nodeSet: NodeSet;
  97. createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly {
  98. from: number;
  99. to: number;
  100. }[]): PartialParse;
  101. configure(config: ParserConfig): LRParser;
  102. hasWrappers(): boolean;
  103. getName(term: number): string;
  104. get topNode(): NodeType;
  105. }
  106. export {};