// AUTOGENERATED FILE
// This file was generated from grammar.ohm by `ohm generateBundles`.

import {
  BaseActionDict,
  Grammar,
  IterationNode,
  Node,
  NonterminalNode,
  Semantics,
  TerminalNode
} from 'ohm-js';

export interface KlogActionDict<T> extends BaseActionDict<T> {
  file?: (this: NonterminalNode, arg0: IterationNode, arg1: IterationNode, arg2: NonterminalNode, arg3: IterationNode, arg4: IterationNode, arg5: IterationNode, arg6: IterationNode, arg7: NonterminalNode) => T;
  record_summaryAndEntries?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: NonterminalNode, arg3: NonterminalNode, arg4: NonterminalNode, arg5: IterationNode, arg6: IterationNode) => T;
  record_entries?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: NonterminalNode, arg3: IterationNode, arg4: IterationNode) => T;
  record_summary?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: NonterminalNode) => T;
  record_empty?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  record?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  recordHead?: (this: NonterminalNode, arg0: NonterminalNode, arg1: IterationNode, arg2: IterationNode) => T;
  shouldTotal?: (this: NonterminalNode, arg0: TerminalNode, arg1: NonterminalNode, arg2: TerminalNode) => T;
  entry?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: IterationNode) => T;
  recordSummary_wrap?: (this: NonterminalNode, arg0: NonterminalNode, arg1: IterationNode, arg2: NonterminalNode, arg3: NonterminalNode, arg4: NonterminalNode) => T;
  recordSummary_single?: (this: NonterminalNode, arg0: NonterminalNode, arg1: IterationNode, arg2: NonterminalNode, arg3: NonterminalNode) => T;
  recordSummary?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  summaryChar?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  entrySummary_same?: (this: NonterminalNode, arg0: TerminalNode, arg1: NonterminalNode) => T;
  entrySummary_next?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode) => T;
  entrySummary_empty?: (this: NonterminalNode, arg0: TerminalNode, arg1: IterationNode) => T;
  entrySummary?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  entrySummarySameLine_wrap?: (this: NonterminalNode, arg0: IterationNode, arg1: NonterminalNode, arg2: NonterminalNode, arg3: NonterminalNode, arg4: NonterminalNode, arg5: NonterminalNode) => T;
  entrySummarySameLine_single?: (this: NonterminalNode, arg0: IterationNode, arg1: NonterminalNode, arg2: NonterminalNode) => T;
  entrySummarySameLine?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  entrySummaryNextLine?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: NonterminalNode) => T;
  date?: (this: NonterminalNode, arg0: NonterminalNode, arg1: NonterminalNode, arg2: NonterminalNode, arg3: NonterminalNode, arg4: TerminalNode, arg5: NonterminalNode, arg6: NonterminalNode, arg7: TerminalNode, arg8: NonterminalNode, arg9: NonterminalNode) => T;
  duration_hourMinute?: (this: NonterminalNode, arg0: IterationNode, arg1: IterationNode, arg2: TerminalNode, arg3: NonterminalNode | TerminalNode, arg4: NonterminalNode | TerminalNode, arg5: TerminalNode) => T;
  duration_hour?: (this: NonterminalNode, arg0: IterationNode, arg1: IterationNode, arg2: TerminalNode) => T;
  duration_minute?: (this: NonterminalNode, arg0: IterationNode, arg1: IterationNode, arg2: TerminalNode) => T;
  duration?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  timeRange_open?: (this: NonterminalNode, arg0: NonterminalNode, arg1: IterationNode, arg2: TerminalNode, arg3: IterationNode, arg4: IterationNode) => T;
  timeRange_closed?: (this: NonterminalNode, arg0: NonterminalNode, arg1: IterationNode, arg2: TerminalNode, arg3: IterationNode, arg4: NonterminalNode) => T;
  timeRange?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  backwardsShiftedTime?: (this: NonterminalNode, arg0: TerminalNode, arg1: NonterminalNode) => T;
  forwardsShiftedTime?: (this: NonterminalNode, arg0: NonterminalNode, arg1: TerminalNode) => T;
  time_twentyFourHour?: (this: NonterminalNode, arg0: NonterminalNode, arg1: TerminalNode, arg2: TerminalNode, arg3: NonterminalNode) => T;
  time_twelveHour?: (this: NonterminalNode, arg0: IterationNode | TerminalNode, arg1: NonterminalNode | TerminalNode, arg2: TerminalNode, arg3: TerminalNode, arg4: NonterminalNode, arg5: IterationNode) => T;
  time?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  twentyFourHour_a?: (this: NonterminalNode, arg0: TerminalNode, arg1: TerminalNode) => T;
  twentyFourHour_b?: (this: NonterminalNode, arg0: TerminalNode, arg1: NonterminalNode) => T;
  twentyFourHour_c?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  twentyFourHour?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  period?: (this: NonterminalNode, arg0: TerminalNode) => T;
  eol?: (this: NonterminalNode, arg0: NonterminalNode) => T;
  newline?: (this: NonterminalNode, arg0: TerminalNode) => T;
  indent_spaces?: (this: NonterminalNode, arg0: TerminalNode, arg1: TerminalNode, arg2: IterationNode, arg3: IterationNode) => T;
  indent?: (this: NonterminalNode, arg0: NonterminalNode | TerminalNode) => T;
  blankCharacter?: (this: NonterminalNode, arg0: TerminalNode) => T;
}

export interface KlogSemantics extends Semantics {
  addOperation<T>(name: string, actionDict: KlogActionDict<T>): this;
  extendOperation<T>(name: string, actionDict: KlogActionDict<T>): this;
  addAttribute<T>(name: string, actionDict: KlogActionDict<T>): this;
  extendAttribute<T>(name: string, actionDict: KlogActionDict<T>): this;
}

export interface KlogGrammar extends Grammar {
  createSemantics(): KlogSemantics;
  extendSemantics(superSemantics: KlogSemantics): KlogSemantics;
}

declare const grammar: KlogGrammar;
export default grammar;

