Package org.jparsec

Class Terminals.Builder

  • Enclosing class:
    Terminals

    public final class Terminals.Builder
    extends java.lang.Object
    Builds Terminals instance by defining the words and keywords recognized. The following example implements a calculator with logical operators:
       
       Terminals terms = Terminals
           .operators("<", ">", "=", ">=", "<=")
           .words(Scanners.IDENTIFIER)
           .caseInsensitiveKeywords("and", "or")
           .build();
       Parser<String> var = Terminals.identifier();
       Parser<Integer> integer = Terminals.IntegerLiteral.PARSER.map(...);
       Parser<?> and = terms.token("and");
       Parser<?> lessThan = terms.token("<");
       ...
       Parser<?> parser = grammar.from(
           terms.tokenizer().or(IntegerLiteral.TOKENIZER), Scanners.WHITSPACES.optional());
     
    Since:
    2.2
    • Field Detail

      • wordScanner

        private final Parser<java.lang.String> wordScanner
      • keywords

        private java.util.Collection<java.lang.String> keywords
      • wordTokenMap

        private java.util.function.Function<java.lang.String,​?> wordTokenMap
    • Constructor Detail

      • Builder

        Builder​(Parser<java.lang.String> wordScanner)
    • Method Detail

      • caseInsensitiveKeywords

        public Terminals.Builder caseInsensitiveKeywords​(java.lang.String... keywords)
        Defines case insensitive keywords. Keywords are special words with their own grammar rules. To get the parser for a keyword, call token(keyword).

        Note that if you call keywords or caseInsensitiveKeywords(java.lang.String...) multiple times on the same Terminals.Builder instance, the last call overwrites previous calls.

      • caseInsensitiveKeywords

        public Terminals.Builder caseInsensitiveKeywords​(java.util.Collection<java.lang.String> keywords)
        Defines case insensitive keywords. Keywords are special words with their own grammar rules. To get the parser for a keyword, call token(keyword).

        Note that if you call keywords or caseInsensitiveKeywords(java.lang.String...) multiple times on the same Terminals.Builder instance, the last call overwrites previous calls.

      • tokenizeWordsWith

        public Terminals.Builder tokenizeWordsWith​(java.util.function.Function<java.lang.String,​?> wordMap)
        Configures alternative tokenization strategy for words (except keywords).
      • build

        public Terminals build()
        Builds a new Terminals instance that recognizes words defined in this builder.