/**
 * Represents a sound value.
 *
 * - An empty array represents a null sound.
 * - An array with a single segment represents the sound of that segment.
 * - An array with multiple elements means "any of these sounds."
 */
export type Sound = string[];
/**
 * Represents an unconstrained rule.
 */
export type Rule = {
    left: Sound[];
    right: Sound[];
};
/**
 * Represents a language constraint on a rule.
 * `left` applies to the left-hand side of a rule,
 * while `right` applies to the right-hand side.
 * Their values are language codes or "_" (means any language).
 */
export type Constraint = {
    left: string;
    right: string;
};
/**
 * Represents a ruleset with a language constraint.
 * The constraint applies to all rules in the set.
 */
export type Ruleset = {
    constraint: Constraint;
    rules: Rule[];
};
/**
 * Create an unconstrained ruleset.
 */
export declare function createUnconstrainedRuleset(rules: Rule[]): Ruleset;
/**
 * Intermediate representation that the parser produces.
 * A program is a sequence of rulesets.
 */
export type IR = {
    rulesets: Ruleset[];
};
//# sourceMappingURL=ir.d.ts.map