## org.h2.bnf
Class Bnf

    java.lang.Object
      org.h2.bnf.Bnf

    public class Bnf

extends java.lang.Object

This class can read a file that is similar to BNF (Backus-Naur form). It is made specially to support SQL grammar.

Constructor Summary
`Bnf()`

Method Summary
`static Bnf` `getInstance(java.io.Reader csv)` Create an instance using the grammar specified in the CSV file.
`java.util.HashMap<java.lang.String,java.lang.String>` `getNextTokenList(java.lang.String query)` Get the list of tokens that can follow.
`RuleHead` `getRuleHead(java.lang.String title)` Get the rule head for the given title.
`static java.lang.String` `getRuleMapKey(java.lang.String token)` Convert convert ruleLink to rule_link.
`java.util.ArrayList<RuleHead>` `getStatements()` Get the list of possible statements.
`static java.util.StringTokenizer` `getTokenizer(java.lang.String s)` Get the tokenizer for the given syntax.
`void` `linkStatements()` Cross-link all statements with each other.
`void` `updateTopic(java.lang.String topic, DbContextRule rule)` Update a topic with a context specific rule.
`void` `visit(BnfVisitor visitor, java.lang.String s)` Parse the syntax and let the rule call the visitor.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### Bnf

    public Bnf()

Method Detail

### getInstance

    public static Bnf getInstance(java.io.Reader csv)
                           throws java.sql.SQLException,
                                  java.io.IOException

  Create an instance using the grammar specified in the CSV file.

  Parameters:
    `csv` - if not specified, the help.csv is used
  Returns:
    a new instance
  Throws:
    `java.sql.SQLException`
    `java.io.IOException`

### visit

    public void visit(BnfVisitor visitor,
                      java.lang.String s)

  Parse the syntax and let the rule call the visitor.

  Parameters:
    `visitor` - the visitor
    `s` - the syntax to parse

### getRuleMapKey

    public static java.lang.String getRuleMapKey(java.lang.String token)

  Convert convert ruleLink to rule_link.

  Parameters:
    `token` - the token
  Returns:
    the rule map key

### getRuleHead

    public RuleHead getRuleHead(java.lang.String title)

  Get the rule head for the given title.

  Parameters:
    `title` - the title
  Returns:
    the rule head, or null

### getNextTokenList

    public java.util.HashMap<java.lang.String,java.lang.String> getNextTokenList(java.lang.String query)

  Get the list of tokens that can follow. This is the main autocomplete method. The returned map for the query 'S' may look like this:

       key: 1#SELECT, value: ELECT
       key: 1#SET, value: ET

  Parameters:
    `query` - the start of the statement
  Returns:
    the map of possible token types / tokens

### linkStatements

    public void linkStatements()

  Cross-link all statements with each other. This method is called after updating the topics.

### updateTopic

    public void updateTopic(java.lang.String topic,
                            DbContextRule rule)

  Update a topic with a context specific rule. This is used for autocomplete support.

  Parameters:
    `topic` - the topic
    `rule` - the database context rule

### getStatements

    public java.util.ArrayList<RuleHead> getStatements()

  Get the list of possible statements.

  Returns:
    the list of statements

### getTokenizer

    public static java.util.StringTokenizer getTokenizer(java.lang.String s)

  Get the tokenizer for the given syntax.

  Parameters:
    `s` - the syntax
  Returns:
    the tokenizer