add get max token type to vocab.
This commit is contained in:
commit
1356186f65
|
@ -90,4 +90,5 @@ YYYY/MM/DD, github id, Full name, email
|
|||
2015/12/24, dtymon, David Tymon, david.tymon@gmail.com
|
||||
2016/02/18, reitzig, Raphael Reitzig, reitzig[at]cs.uni-kl.de
|
||||
2016/03/27, beardlybread, Bradley Steinbacher, bradley.j.steinbacher@gmail.com
|
||||
2016/03/29, msteiger, Martin Steiger, antlr@martin-steiger.de
|
||||
2016/03/28, gagern, Martin von Gagern, gagern@ma.tum.de
|
||||
|
|
|
@ -37,6 +37,14 @@ package org.antlr.v4.runtime;
|
|||
* @author Sam Harwell
|
||||
*/
|
||||
public interface Vocabulary {
|
||||
|
||||
/**
|
||||
* Returns the highest token type value. It can be used to iterate from
|
||||
* zero to that number, thus querying all stored entries.
|
||||
* @return the highest token type value
|
||||
*/
|
||||
int getMaxTokenType();
|
||||
|
||||
/**
|
||||
* Gets the string literal associated with a token type. The string returned
|
||||
* by this method, when not {@code null}, can be used unaltered in a parser
|
||||
|
@ -85,7 +93,7 @@ public interface Vocabulary {
|
|||
*
|
||||
* <ul>
|
||||
* <li>Tokens created by lexer rules.</li>
|
||||
* <li>Tokens defined in a {@code tokens{}} block in a lexer or parser
|
||||
* <li>Tokens defined in a <code>tokens{}</code> block in a lexer or parser
|
||||
* grammar.</li>
|
||||
* <li>The implicitly defined {@code EOF} token, which has the token type
|
||||
* {@link Token#EOF}.</li>
|
||||
|
|
|
@ -57,6 +57,8 @@ public class VocabularyImpl implements Vocabulary {
|
|||
|
||||
private final String[] displayNames;
|
||||
|
||||
private final int maxTokenType;
|
||||
|
||||
/**
|
||||
* Constructs a new instance of {@link VocabularyImpl} from the specified
|
||||
* literal and symbolic token names.
|
||||
|
@ -94,6 +96,8 @@ public class VocabularyImpl implements Vocabulary {
|
|||
this.literalNames = literalNames != null ? literalNames : EMPTY_NAMES;
|
||||
this.symbolicNames = symbolicNames != null ? symbolicNames : EMPTY_NAMES;
|
||||
this.displayNames = displayNames != null ? displayNames : EMPTY_NAMES;
|
||||
this.maxTokenType = Math.max(this.displayNames.length,
|
||||
Math.max(this.literalNames.length, this.symbolicNames.length));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -143,6 +147,11 @@ public class VocabularyImpl implements Vocabulary {
|
|||
return new VocabularyImpl(literalNames, symbolicNames, tokenNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxTokenType() {
|
||||
return maxTokenType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLiteralName(int tokenType) {
|
||||
if (tokenType >= 0 && tokenType < literalNames.length) {
|
||||
|
|
Loading…
Reference in New Issue