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 class
Terminals.Builder
BuildsTerminals
instance by defining the words and keywords recognized.static class
Terminals.CharLiteral
Entry point for parser and tokenizers of character literal.static class
Terminals.DecimalLiteral
Entry point for parser and tokenizers of decimal number literal represented asString
.static class
Terminals.Identifier
Entry point for parser and tokenizers of regular identifier.static class
Terminals.IntegerLiteral
Entry point for any arbitrary integer literal represented as aString
.static class
Terminals.LongLiteral
Entry point for parser and tokenizers of integral number literal represented asLong
.static class
Terminals.ScientificNumberLiteral
Entry point for parser and tokenizers of scientific notation literal.static class
Terminals.StringLiteral
Entry 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 Terminals
caseInsensitive(java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .caseInsensitiveKeywords(keywords) .build()
instead.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.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.static Terminals
caseSensitive(java.lang.String[] ops, java.lang.String[] keywords)
Deprecated.Useoperators(ops) .words(Scanners.IDENTIFIER) .keywords(keywords) .build()
instead.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.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.(package private) static void
checkDup(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 aTokenMap
object that only recognizesTokens.Fragment
token values tagged with one oftags
.static Parser<java.lang.String>
identifier()
Returns aParser
that recognizes identifiers (a.k.a words, variable names etc).static Terminals
operators(java.lang.String... ops)
Returns aTerminals
object for lexing the operators with names specified inops
.static Terminals
operators(java.util.Collection<java.lang.String> ops)
Returns aTerminals
object for lexing the operators with names specified inops
.Terminals.Builder
words(Parser<java.lang.String> wordScanner)
Starts to build a newTerminals
instance that recognizes words not already recognized bythis
Terminals
instance (typically operators).
-
-
-
Field Detail
-
RESERVED
public static final Parser<java.lang.String> RESERVED
Parser
that recognizes reserved word tokens. i.e.Tokens.Fragment
tokens 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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.- 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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.- 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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.- 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 aTerminals
object 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.Fragment
withTokens.Tag.RESERVED
tag. Words that are not amongkeywords
are lexed asFragment
withTokens.Tag.IDENTIFIER
tag.- 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 aTerminals
object for lexing the operators with names specified inops
. Operators are lexed asTokens.Fragment
withTokens.Tag.RESERVED
tag. 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 aTerminals
object for lexing the operators with names specified inops
. Operators are lexed asTokens.Fragment
withTokens.Tag.RESERVED
tag. 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 newTerminals
instance that recognizes words not already recognized bythis
Terminals
instance (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 aParser
that 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 aTokenMap
object that only recognizesTokens.Fragment
token values tagged with one oftags
.
-
checkDup
static void checkDup(java.lang.Iterable<java.lang.String> a, java.lang.Iterable<java.lang.String> b)
-
-