Class Terminals
- java.lang.Object
-
- org.jparsec.Lexicon
-
- org.jparsec.Terminals
-
public final class Terminals extends Lexicon
Provides convenient API to build lexer and parsers for terminals. The following example is a parser snippet for Java generic type expression such asList<String>:Terminals terms = Terminals .operators("?", "<", ">", ",") .words(Scanners.IDENTIFIER) .keywords("super", "extends") .build(); Parser<String> typeName = Terminals.identifier(); Parser<?> wildcardWithUpperBound = terms.phrase("?", "extends"); ... parser.from(terms.tokenizer(), Scanners.WHITESPACES.optional()).parse("List<String>");
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classTerminals.BuilderBuildsTerminalsinstance by defining the words and keywords recognized.static classTerminals.CharLiteralEntry point for parser and tokenizers of character literal.static classTerminals.DecimalLiteralEntry point for parser and tokenizers of decimal number literal represented asString.static classTerminals.IdentifierEntry point for parser and tokenizers of regular identifier.static classTerminals.IntegerLiteralEntry point for any arbitrary integer literal represented as aString.static classTerminals.LongLiteralEntry point for parser and tokenizers of integral number literal represented asLong.static classTerminals.ScientificNumberLiteralEntry point for parser and tokenizers of scientific notation literal.static classTerminals.StringLiteralEntry point for parser and tokenizers of string literal.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static TerminalscaseInsensitive(java.lang.String[] ops, java.lang.String[] keywords)Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .caseInsensitiveKeywords(keywords) .build()instead.static TerminalscaseInsensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords)Deprecated.Useoperators(ops) .words(wordScanner) .caseInsensitiveKeywords(keywords) .build()instead.static TerminalscaseInsensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords, java.util.function.Function<java.lang.String,?> wordMap)Deprecated.Useoperators(ops) .words(wordScanner) .tokenizeWordsWith(wordMap) .caseInsensitiveKeywords(keywords) .build()instead.static TerminalscaseSensitive(java.lang.String[] ops, java.lang.String[] keywords)Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .keywords(keywords) .build()instead.static TerminalscaseSensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords)Deprecated.Useoperators(ops) .words(wordScanner) .keywords(keywords) .build()instead.static TerminalscaseSensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords, java.util.function.Function<java.lang.String,?> wordMap)Deprecated.Useoperators(ops) .words(wordScanner) .tokenizeWordsWith(wordMap) .keywords(keywords) .build()instead.(package private) static voidcheckDup(java.lang.Iterable<java.lang.String> a, java.lang.Iterable<java.lang.String> b)static Parser<java.lang.String>fragment(java.lang.Object... tags)(package private) static TokenMap<java.lang.String>fromFragment(java.lang.Object... tags)Returns aTokenMapobject that only recognizesTokens.Fragmenttoken values tagged with one oftags.static Parser<java.lang.String>identifier()Returns aParserthat recognizes identifiers (a.k.a words, variable names etc).static Terminalsoperators(java.lang.String... ops)Returns aTerminalsobject for lexing the operators with names specified inops.static Terminalsoperators(java.util.Collection<java.lang.String> ops)Returns aTerminalsobject for lexing the operators with names specified inops.Terminals.Builderwords(Parser<java.lang.String> wordScanner)Starts to build a newTerminalsinstance that recognizes words not already recognized bythisTerminalsinstance (typically operators).
-
-
-
Field Detail
-
RESERVED
public static final Parser<java.lang.String> RESERVED
Parserthat recognizes reserved word tokens. i.e.Tokens.Fragmenttokens tagged asTokens.Tag.RESERVED.Tokens.Fragment.text()is returned as parser result.
-
-
Constructor Detail
-
Terminals
private Terminals(Lexicon lexicon)
-
-
Method Detail
-
caseInsensitive
@Deprecated public static Terminals caseInsensitive(java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .caseInsensitiveKeywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case insensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.A word is defined as an alphanumeric string that starts with
[_a - zA - Z], with 0 or more[0 - 9_a - zA - Z]following.- Parameters:
ops- the operator names.keywords- the keyword names.- Returns:
- the Terminals instance.
-
caseSensitive
@Deprecated public static Terminals caseSensitive(java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .keywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case sensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.A word is defined as an alphanumeric string that starts with
[_a - zA - Z], with 0 or more[0 - 9_a - zA - Z]following.- Parameters:
ops- the operator names.keywords- the keyword names.- Returns:
- the Terminals instance.
-
caseInsensitive
@Deprecated public static Terminals caseInsensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(wordScanner) .caseInsensitiveKeywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case insensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.- Parameters:
wordScanner- the scanner that returns a word in the language.ops- the operator names.keywords- the keyword names.- Returns:
- the Terminals instance.
-
caseSensitive
@Deprecated public static Terminals caseSensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(wordScanner) .keywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case sensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.- Parameters:
wordScanner- the scanner that returns a word in the language.ops- the operator names.keywords- the keyword names.- Returns:
- the Terminals instance.
-
caseInsensitive
@Deprecated public static Terminals caseInsensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords, java.util.function.Function<java.lang.String,?> wordMap)
Deprecated.Useoperators(ops) .words(wordScanner) .tokenizeWordsWith(wordMap) .caseInsensitiveKeywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case insensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.- Parameters:
wordScanner- the scanner that returns a word in the language.ops- the operator names.keywords- the keyword names.wordMap- maps the text to a token value for non-keywords recognized bywordScanner.- Returns:
- the Terminals instance.
-
caseSensitive
@Deprecated public static Terminals caseSensitive(Parser<java.lang.String> wordScanner, java.lang.String[] ops, java.lang.String[] keywords, java.util.function.Function<java.lang.String,?> wordMap)
Deprecated.Useoperators(ops) .words(wordScanner) .tokenizeWordsWith(wordMap) .keywords(keywords) .build()instead.Returns aTerminalsobject for lexing and parsing the operators with names specified inops, and for lexing and parsing the keywords case sensitively. Parsers for operators and keywords can be obtained throughLexicon.token(java.lang.String...); parsers for identifiers throughidentifier().In detail, keywords and operators are lexed as
Tokens.FragmentwithTokens.Tag.RESERVEDtag. Words that are not amongkeywordsare lexed asFragmentwithTokens.Tag.IDENTIFIERtag.- Parameters:
wordScanner- the scanner that returns a word in the language.ops- the operator names.keywords- the keyword names.wordMap- maps the text to a token value for non-keywords recognized bywordScanner.- Returns:
- the Terminals instance.
-
operators
public static Terminals operators(java.lang.String... ops)
Returns aTerminalsobject for lexing the operators with names specified inops. Operators are lexed asTokens.FragmentwithTokens.Tag.RESERVEDtag. For example, to get the parser for operator "?", simply calltoken("?").If words and keywords need to be parsed, they can be configured via
words(org.jparsec.Parser<java.lang.String>).- Parameters:
ops- the operator names.- Returns:
- the Terminals instance.
-
operators
public static Terminals operators(java.util.Collection<java.lang.String> ops)
Returns aTerminalsobject for lexing the operators with names specified inops. Operators are lexed asTokens.FragmentwithTokens.Tag.RESERVEDtag. For example, to get the parser for operator "?", simply calltoken("?").If words and keywords need to be parsed, they can be configured via
words(org.jparsec.Parser<java.lang.String>).- Parameters:
ops- the operator names.- Returns:
- the Terminals instance.
- Since:
- 2.2
-
words
public Terminals.Builder words(Parser<java.lang.String> wordScanner)
Starts to build a newTerminalsinstance that recognizes words not already recognized bythisTerminalsinstance (typically operators).By default identifiers are recognized through
identifier()during token-level parsing phase. UseTerminals.Builder.tokenizeWordsWith(java.util.function.Function<java.lang.String, ?>)to tokenize differently, and choose an alternative token-level parser accordingly.- Parameters:
wordScanner- defines words recognized by the new instance- Since:
- 2.2
-
identifier
public static Parser<java.lang.String> identifier()
Returns aParserthat recognizes identifiers (a.k.a words, variable names etc). Equivalent toTerminals.Identifier.PARSER.- Since:
- 2.2
-
fragment
public static Parser<java.lang.String> fragment(java.lang.Object... tags)
-
fromFragment
static TokenMap<java.lang.String> fromFragment(java.lang.Object... tags)
Returns aTokenMapobject that only recognizesTokens.Fragmenttoken values tagged with one oftags.
-
checkDup
static void checkDup(java.lang.Iterable<java.lang.String> a, java.lang.Iterable<java.lang.String> b)
-
-