Skip to main content

Ohm Errors

Instantiating Grammars

These errors can occur when instatiating a grammar from a grammar definition.

Grammar Syntax Error

Example:

Uncaught ohm.error.GrammarSyntaxError: Failed to parse grammar:
Line 5, col 11:
4 | G {
> 5 | start = *x
^
6 | }
Expected "~", "&", "#", an identifier, "\"", a number, "(", "[", "``", "{", "--", "|", or "}"

Indicates that the grammar definition is not well-formed according to the syntax of the Ohm language. See the syntax reference for more details.

Undeclared Grammar

Example:

Uncaught ohm.error.UndeclaredGrammar: Grammar Foo is not declared in namespace [object Object]

Indicates that the grammar definition refers to another grammar by name, but that name does not refer to a grammar that Ohm knows about. This can happen when you instantiate a grammar that inherits from another grammar. Possible fixes:

  • If you're defining multiple grammars, ensure that the supergrammar appears first in the grammar definition.

  • If the supergrammar was defined elsewhere, you need to pass a namespace argument to the instantiation function (ohm.grammar(), etc.), and the namespace must reference the supergrammar with the appropriate property name. E.g.:

    const ns = {};
    ns.G1 = ohm.grammar('G1 {}');
    const g2 = ohm.grammar('G2 <: G1 {}', ns);

Duplicate Grammar Declaration

Example:

Uncaught ohm.error.DuplicateGrammarDeclaration: Grammar G is already declared in namespace [object Object]

Occurs when a grammar definition defines a grammar with the same name as an existing grammar in the same namespace. Possible fixes:

  • Make sure you're not accidentally instantiating the same grammar twice
  • Instantiate the second grammar in a different namespace, or without using a namespace.

Undeclared Rule

Example:

Uncaught ohm.error.UndeclaredRule: Rule lettr is not declared in grammar G

Occurs when the body of a rule refers to a another rule that is not defined in the grammar or in any of its supergrammars.

Cannot Override Undeclared Rule

Example:

Uncaught ohm.error.CannotOverrideUndeclaredRule: Cannot override rule foo because it is not declared in BuiltInRules

Occurs when a rule is being overridden (using :=), but no rule with that name exists in the supergrammar. Learn more about defining, extending, and overriding rules in the syntax reference.

Cannot Extend Undeclared Rule

Example:

Uncaught ohm.error.CannotExtendUndeclaredRule: Cannot extend rule start foo it is not declared in BuiltInRules

Occurs when a rule is being extended (using +=), but no rule with that name exists in the supergrammar. Learn more about defining, extending, and overriding rules in the syntax reference.

Duplicate Rule Declaration

Example:

Uncaught ohm.error.DuplicateRuleDeclaration: Duplicate declaration for rule 'letter' in grammar 'G' (originally declared in grammar 'BuiltInRules')

Occurs when a rule is being defined (using =), but a rule with that name already exists in the grammar or supergrammar. If it exists in the supergrammar, you can only override (:=) or extend (+=) the rule. Learn more about defining, extending, and overriding rules in the syntax reference.