Class Grammar

java.lang.Object
org.episteme.natural.computing.ai.automata.Grammar

public class Grammar extends Object
Context-Free Grammar implementation.

A context-free grammar is a formal grammar consisting of:

  • A set of terminal symbols (the alphabet)
  • A set of non-terminal symbols (variables)
  • A set of production rules
  • A start symbol

Since:
1.0
Author:
Silvere Martin-Michiellot, Gemini AI (Google DeepMind)
  • Constructor Details

    • Grammar

      public Grammar(String startSymbol)
      Creates a new grammar with the given start symbol.
      Parameters:
      startSymbol - the start symbol (non-terminal)
  • Method Details

    • addTerminal

      public Grammar addTerminal(String terminal)
      Adds a terminal symbol.
      Parameters:
      terminal - the terminal symbol
      Returns:
      this grammar for chaining
    • addTerminals

      public Grammar addTerminals(String... terminals)
      Adds multiple terminal symbols.
      Parameters:
      terminals - the terminal symbols
      Returns:
      this grammar for chaining
    • addNonTerminal

      public Grammar addNonTerminal(String nonTerminal)
      Adds a non-terminal symbol.
      Parameters:
      nonTerminal - the non-terminal symbol
      Returns:
      this grammar for chaining
    • addProduction

      public Grammar addProduction(String lhs, String... rhsSymbols)
      Adds a production rule.

      Example: addProduction("S", "a", "B") means S → aB

      Parameters:
      lhs - left-hand side (non-terminal)
      rhsSymbols - right-hand side symbols
      Returns:
      this grammar for chaining
    • addEpsilonProduction

      public Grammar addEpsilonProduction(String lhs)
      Adds an epsilon (empty) production.
      Parameters:
      lhs - left-hand side
      Returns:
      this grammar for chaining
    • getStartSymbol

      public String getStartSymbol()
      Returns the start symbol.
      Returns:
      start symbol
    • getTerminals

      public Set<String> getTerminals()
      Returns all terminal symbols.
      Returns:
      unmodifiable set of terminals
    • getNonTerminals

      public Set<String> getNonTerminals()
      Returns all non-terminal symbols.
      Returns:
      unmodifiable set of non-terminals
    • getProductions

      public List<List<String>> getProductions(String nonTerminal)
      Returns all productions for a given non-terminal.
      Parameters:
      nonTerminal - the non-terminal
      Returns:
      list of productions (each production is a list of symbols)
    • isTerminal

      public boolean isTerminal(String symbol)
      Checks if a symbol is a terminal.
      Parameters:
      symbol - the symbol
      Returns:
      true if terminal
    • isNonTerminal

      public boolean isNonTerminal(String symbol)
      Checks if a symbol is a non-terminal.
      Parameters:
      symbol - the symbol
      Returns:
      true if non-terminal
    • generateRandom

      public String generateRandom(int maxSteps)
      Generates a random derivation from the start symbol.

      Useful for testing and generating sample strings. May not terminate for grammars with left recursion.

      Parameters:
      maxSteps - maximum derivation steps
      Returns:
      the derived string, or null if max steps exceeded
    • toString

      public String toString()
      Overrides:
      toString in class Object