import { IParsingExpressionVisitor } from './IParsingExpressionVisitor';
import { Rule } from './Rule';
export interface IParsingExpression {
    accept<ArgsType extends Array<unknown> = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
declare abstract class UnaryOperator implements IParsingExpression {
    operand: IParsingExpression;
    constructor(operand: IParsingExpression);
    abstract accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
declare abstract class BinaryOperator implements IParsingExpression {
    lhs: IParsingExpression;
    rhs: IParsingExpression;
    constructor(lhs: IParsingExpression, rhs: IParsingExpression);
    abstract accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
declare abstract class GeneralOperator implements IParsingExpression {
    operands: IParsingExpression[];
    constructor(operands: IParsingExpression[]);
    abstract accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class NullParsingExpression implements IParsingExpression {
    accept<ArgsType extends Array<unknown>, ReturnType>(_visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ..._arg: ArgsType): ReturnType;
}
export declare class Nonterminal implements IParsingExpression {
    rule: Rule;
    name: string;
    constructor(rule: Rule, name?: string);
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Terminal implements IParsingExpression {
    pattern: RegExp;
    source: string;
    regex: RegExp;
    constructor(pattern: RegExp, source: string);
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class ZeroOrMore extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class OneOrMore extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Optional extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class And extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Not extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Colon extends BinaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class ColonNot extends BinaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Sequence extends GeneralOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class OrderedChoice extends GeneralOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Grouping extends UnaryOperator {
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Rewriting implements IParsingExpression {
    operand: IParsingExpression;
    spec: string;
    constructor(operand: IParsingExpression, spec: string);
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export declare class Lake extends UnaryOperator {
    readonly originalOperand: IParsingExpression;
    constructor(operand: IParsingExpression);
    makeSemantics(symbols: Set<IParsingExpression>, waterRules: Rule[]): void;
    accept<ArgsType extends unknown[] = [], ReturnType = void>(visitor: IParsingExpressionVisitor<ArgsType, ReturnType>, ...arg: ArgsType): ReturnType;
}
export {};
//# sourceMappingURL=ParsingExpression.d.ts.map