/** * Consumes (and documents) the messy output produced by the parser, and turns it into parsedsyntax.ts types. This file could easily produce garbage output if there's a mismatch between the documented types and the types that the parser produces. This file should only throw errors to document invariants of the parser; user errors should be thrown in restrictsyntax.ts. * * The structure of this file should match parsedsyntax.ts as much as practical. */ import { Token } from "moo"; import * as ast from "./ast"; import * as parsed from "./parsedsyntax"; export declare function Identifier([{value, text, offset, lineBreaks, line, col}]: Token[]): ast.Identifier; export declare function IntType([tok]: [Token]): ast.IntType; export declare function BoolType([tok]: [Token]): ast.BoolType; export declare function StringType([tok]: [Token]): ast.StringType; export declare function CharType([tok]: [Token]): ast.CharType; export declare function VoidType([tok]: [Token]): ast.VoidType; export declare function PointerType([tp, s, tok]: [ast.Type, any, Token]): ast.PointerType; export declare function ArrayType([tp, s1, l, s2, r]: [ast.Type, any, Token, any, Token]): ast.ArrayType; export declare function StructType([str, s, id]: [Token, any, ast.Identifier]): ast.StructType; export declare function IntLiteral([{value, text, offset, lineBreaks, line, col}]: Token[]): parsed.IntLiteral; export declare function CharLiteral([[start, [tok], end]]: [[Token, [Token], Token]]): parsed.CharLiteral; export declare function StringLiteral([[start, toks, end]]: [[Token, [Token][], Token]]): parsed.StringLiteral; export declare function BoolLiteral([t]: [Token]): ast.BoolLiteral; export declare function NullLiteral(): ast.NullLiteral; export declare function ArrayMemberExpression([object, s1, l, s2, index, s3, r]: [parsed.Expression, any, Token, any, parsed.Expression, any, Token]): parsed.ArrayMemberExpression; export declare type Arguments = [Token, any, null | [parsed.Expression, any, [Token, any, parsed.Expression][]], Token]; export declare function Arguments([l, s1, args, r]: Arguments): parsed.Expression[]; export declare function StructMemberExpression([object, s1, deref, s2, field]: [parsed.Expression, any, [Token, Token] | Token, any, ast.Identifier]): parsed.StructMemberExpression; export declare function CallExpression([f, ws, args]: [ast.Identifier, any, Arguments]): parsed.CallExpression; export declare function IndirectCallExpression([l, s1, s, s2, f, s3, r, s4, args]: [Token, any, Token, any, parsed.Expression, any, Token, any, Arguments]): parsed.IndirectCallExpression; export declare function UnaryExpression([operator, s, argument]: [any[], Token, parsed.Expression]): parsed.UnaryExpression | parsed.CastExpression; export declare function BinaryExpression([left, s1, opertoks, s2, right]: [parsed.Expression, any, Token[], any, parsed.Expression]): parsed.BinaryExpression | parsed.LogicalExpression | parsed.AssignmentExpression; export declare function ConditionalExpression([test, s1, op1, s2, consequent, s3, op2, s4, alternate]: [parsed.Expression, any, any, any, parsed.Expression, any, any, any, parsed.Expression]): parsed.ConditionalExpression; export declare function AllocExpression([alloc, s1, l, s2, typ, s3, r]: [Token, any, Token, any, ast.Type, any, Token]): parsed.AllocExpression; export declare function AllocArrayExpression([alloc, s1, l, s2, typ, s3, c, s4, size, sp, r]: [Token, any, Token, any, ast.Type, any, Token, any, parsed.Expression, any, Token]): parsed.AllocArrayExpression; export declare function ResultExpression([b, res]: [Token, Token]): parsed.ResultExpression; export declare function LengthExpression([b, length, s1, l, s2, argument, s3, r]: [Token, Token, any, Token, any, parsed.Expression, any, Token]): parsed.LengthExpression; export declare function HasTagExpression([b, hastag, s1, l, s2, typ, s3, c, s4, argument, s5, r]: [Token, Token, any, Token, any, ast.Type, any, Token, any, parsed.Expression, any, Token]): parsed.HasTagExpression; export declare function UpdateExpression([argument, s1, op1, op2]: [parsed.Expression, any, Token, Token]): parsed.UpdateExpression; export declare function AssertExpression([assert, s1, l, s2, test, s3, r]: [Token, any, Token, any, parsed.Expression, any, Token]): parsed.AssertExpression; export declare function ErrorExpression([error, s1, l, s2, argument, s3, r]: [Token, any, Token, any, parsed.Expression, any, Token]): parsed.ErrorExpression; export declare type SimpleParsed = parsed.Expression | [ast.Type, any, ast.Identifier, null | [any, Token, any, parsed.Expression]]; export declare function SimpleStatement([stm, s1, semi]: [SimpleParsed, any, Token]): parsed.VariableDeclaration | parsed.ExpressionStatement; export declare function IfStatement([i, s1, l, s2, test, s3, r, s4, [annos, consequent]]: [Token, any, Token, any, parsed.Expression, any, Token, any, [parsed.Anno[], parsed.Statement]]): parsed.IfStatement; export declare function IfElseStatement([i, s1, l1, s2, test, s3, r, annos1, s4, consequent, s5, e, annos2, s6, alternate]: [Token, any, Token, any, parsed.Expression, any, Token, parsed.Anno[], any, parsed.Statement, any, Token, parsed.Anno[], any, parsed.Statement]): parsed.IfStatement; export declare function WhileStatement([w, s1, l, s2, test, s3, r, annos, s4, body]: [Token, any, Token, any, parsed.Expression, any, Token, parsed.Anno[], any, parsed.Statement]): parsed.WhileStatement; export declare function ForStatement([f, s1, l, init, s2, semi1, s3, test, s4, semi2, update, s5, r, annos, s6, body]: [Token, any, Token, null | [any, SimpleParsed], any, Token, any, parsed.Expression, any, Token, null | [any, parsed.Expression], any, Token, parsed.Anno[], any, parsed.Statement]): parsed.ForStatement; export declare function ReturnStatement([r, argument, s1, semi]: [Token, null | [any, parsed.Expression], any, Token]): parsed.ReturnStatement; export declare function BlockStatement([l, stms, annos, s, r]: [Token, [any, [parsed.Anno[], parsed.Statement]][], [any, [parsed.Anno]][], any, Token]): parsed.BlockStatement; export declare function BreakStatement([stm, s1, semi]: [Token, any, Token]): ast.BreakStatement; export declare function ContinueStatement([stm, s1, semi]: [Token, any, Token]): ast.ContinueStatement; export declare function Anno1(annos: [Token, any, parsed.Anno[], any, Token] | [Token, any, parsed.Anno[], any, Token, any[], Token]): parsed.Anno[]; export declare function FunctionDeclarationArgs([l, s1, params, r]: [Token, any, null | [ast.Type, any, ast.Identifier, any, [Token, any, ast.Type, any, ast.Identifier, any][]], Token]): parsed.VariableDeclarationOnly[]; export declare function FunctionDeclaration([ty, s1, f, s2, args, annos, s3, def]: [ast.Type, any, ast.Identifier, any, ast.VariableDeclarationOnly[], parsed.Anno[], any, null | parsed.BlockStatement]): parsed.FunctionDeclaration;