import { ASTNodeConstructor } from "../classes/ASTNode";
export declare type GrammarRuleContentItem = GrammarAtom | GrammarBinaryLoop | GrammarBlockLoop[] | GrammarEither;
export declare type GrammarRuleContent = GrammarRuleContentItem[];
export declare enum GrammarAtomType {
    RULE = 0,
    TOKEN = 1
}
export declare enum GrammarRuleSpecialMatch {
    PASS = 0,
    FUNC = 1
}
/** The grammar rule variation */
export default class GrammarRule {
    name: string;
    content: GrammarRuleContent;
    match: ASTNodeConstructor | GrammarRuleSpecialMatch;
    func?: Function;
    ignored?: GrammarAtom[];
    preventRollback: boolean;
    constructor(name: string, content: GrammarRuleContent, match: ASTNodeConstructor | GrammarRuleSpecialMatch, func?: Function, ignored?: GrammarAtom[], preventRollback?: boolean);
}
/** A single grammar rule variation object. Can be a token or a reference to another rule */
export declare class GrammarAtom {
    name: string;
    value: any;
    type: GrammarAtomType;
    skip: boolean;
    constructor(name: string, type: GrammarAtomType, value?: any, skip?: boolean);
}
/** Binary loop grammar item */
export declare class GrammarBinaryLoop {
    content: GrammarRuleContent;
}
/** Block loop grammar item */
export declare class GrammarBlockLoop {
    content: GrammarRuleContent;
}
/** Either selector grammar item */
export declare class GrammarEither {
    variants: GrammarRuleContent;
}
