private static LineColumnValue tokenPosition(Input input, int startIndex, int endIndex) { int[] lineAndColumn = input.lineAndColumnAt(startIndex); String value = input.substring(startIndex, endIndex); return new LineColumnValue(lineAndColumn[0], lineAndColumn[1] - 1, value); }
public N parse(File file) { try { char[] chars = new String(Files.readAllBytes(Paths.get(file.getPath())), charset).toCharArray(); return parse(new Input(chars, file.toURI())); } catch (IOException e) { throw new RuntimeException(e); } }
public Input(char[] input, URI uri) { this.inputChars = input; this.uri = uri; List<Integer> newLineIndexesBuilder = new ArrayList<>(); for (int i = 0; i < input.length; i++) { if (isNewLine(input, i)) { newLineIndexesBuilder.add(i + 1); } } this.newLineIndexes = new int[newLineIndexesBuilder.size()]; for (int i = 0; i < newLineIndexes.length; i++) { this.newLineIndexes[i] = newLineIndexesBuilder.get(i); } }
public int[] lineAndColumnAt(int index) { int[] result = new int[2]; result[0] = lineAt(index); result[1] = index - lineStartIndex(result[0]) + 1; return result; }
private void addComment(ParseNode node) { tokenBuilder.setGeneratedCode(false); int[] lineAndColumn = input.lineAndColumnAt(node.getStartIndex()); tokenBuilder.setLine(lineAndColumn[0]); tokenBuilder.setColumn(lineAndColumn[1] - 1); tokenBuilder.setURI(input.uri()); String value = input.substring(node.getStartIndex(), node.getEndIndex()); tokenBuilder.setValueAndOriginalValue(value); tokenBuilder.setTrivia(Collections.<Trivia>emptyList()); tokenBuilder.setType(GenericTokenType.COMMENT); trivias.add(Trivia.createComment(tokenBuilder.build())); }
private static boolean isByteOrderMark(Input input, int startIndex, int endIndex) { return (Character.toString(BYTE_ORDER_MARK)).equals(input.substring(startIndex, endIndex)); }
@Override public Object createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { char[] fileChars = input.input(); boolean hasByteOrderMark = fileChars.length > 0 && fileChars[0] == BYTE_ORDER_MARK; boolean isEof = GenericTokenType.EOF.equals(type); LineColumnValue lineColumnValue = tokenPosition(input, startIndex, endIndex); return new InternalSyntaxToken( lineColumnValue.line + lineOffset, column(hasByteOrderMark, lineColumnValue.line, lineColumnValue.column), lineColumnValue.value, createTrivias(trivias, hasByteOrderMark), startIndex - (hasByteOrderMark ? 1 : 0), isEof); }
private void addComment(ParseNode node) { tokenBuilder.setGeneratedCode(false); int[] lineAndColumn = input.lineAndColumnAt(node.getStartIndex()); tokenBuilder.setLine(lineAndColumn[0]); tokenBuilder.setColumn(lineAndColumn[1] - 1); tokenBuilder.setURI(input.uri()); String value = input.substring(node.getStartIndex(), node.getEndIndex()); tokenBuilder.setValueAndOriginalValue(value); tokenBuilder.setTrivia(Collections.<Trivia>emptyList()); tokenBuilder.setType(GenericTokenType.COMMENT); trivias.add(Trivia.createComment(tokenBuilder.build())); }
private static boolean isByteOrderMark(Input input, int startIndex, int endIndex) { return (Character.toString(BYTE_ORDER_MARK)).equals(input.substring(startIndex, endIndex)); }
@Override public Object createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { char[] fileChars = input.input(); boolean hasByteOrderMark = fileChars.length > 0 && fileChars[0] == BYTE_ORDER_MARK; boolean isEof = GenericTokenType.EOF.equals(type); LineColumnValue lineColumnValue = tokenPosition(input, startIndex, endIndex); return new InternalSyntaxToken( lineColumnValue.line + lineOffset, column(hasByteOrderMark, lineColumnValue.line, lineColumnValue.column), lineColumnValue.value, createTrivias(trivias, hasByteOrderMark), startIndex - (hasByteOrderMark ? 1 : 0), isEof); }
public int[] lineAndColumnAt(int index) { int[] result = new int[2]; result[0] = lineAt(index); result[1] = index - lineStartIndex(result[0]) + 1; return result; }
private static LineColumnValue tokenPosition(Input input, int startIndex, int endIndex) { int[] lineAndColumn = input.lineAndColumnAt(startIndex); String value = input.substring(startIndex, endIndex); return new LineColumnValue(lineAndColumn[0], lineAndColumn[1] - 1, value); }
@Override public AstNode createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { int[] lineAndColumn = input.lineAndColumnAt(startIndex); Token token = Token.builder() .setType(type == null ? UNDEFINED_TOKEN_TYPE : type) .setLine(lineAndColumn[0]) .setColumn(lineAndColumn[1] - 1) .setValueAndOriginalValue(input.substring(startIndex, endIndex)) .setURI(input.uri()) .setGeneratedCode(false) .setTrivia(trivias) .build(); AstNode astNode = new AstNode(token); astNode.setFromIndex(startIndex); astNode.setToIndex(endIndex); return astNode; }
@Override public Object createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { String value = input.substring(startIndex, endIndex); return new InternalSyntaxToken(value); }
@Override public Object createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { char[] fileChars = input.input(); boolean hasByteOrderMark = fileChars.length > 0 && fileChars[0] == BYTE_ORDER_MARK; boolean isEof = GenericTokenType.EOF.equals(type); LineColumnValue lineColumnValue = tokenPosition(input, startIndex, endIndex); return new InternalSyntaxToken( lineColumnValue.line, column(hasByteOrderMark, lineColumnValue.line, lineColumnValue.column), lineColumnValue.value, createTrivias(trivias, hasByteOrderMark), isEof, isByteOrderMark(input, startIndex, endIndex)); }
public N parse(File file) { try { char[] chars = new String(Files.readAllBytes(Paths.get(file.getPath())), charset).toCharArray(); return parse(new Input(chars, file.toURI())); } catch (IOException e) { throw new RuntimeException(e); } }
public Input(char[] input, URI uri) { this.inputChars = input; this.uri = uri; List<Integer> newLineIndexesBuilder = new ArrayList<>(); for (int i = 0; i < input.length; i++) { if (isNewLine(input, i)) { newLineIndexesBuilder.add(i + 1); } } this.newLineIndexes = new int[newLineIndexesBuilder.size()]; for (int i = 0; i < newLineIndexes.length; i++) { this.newLineIndexes[i] = newLineIndexesBuilder.get(i); } }
private static LineColumnValue tokenPosition(Input input, int startIndex, int endIndex) { int[] lineAndColumn = input.lineAndColumnAt(startIndex); String value = input.substring(startIndex, endIndex); return new LineColumnValue(lineAndColumn[0], lineAndColumn[1] - 1, value); }
@Override public AstNode createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { int[] lineAndColumn = input.lineAndColumnAt(startIndex); Token token = Token.builder() .setType(type == null ? UNDEFINED_TOKEN_TYPE : type) .setLine(lineAndColumn[0]) .setColumn(lineAndColumn[1] - 1) .setValueAndOriginalValue(input.substring(startIndex, endIndex)) .setURI(input.uri()) .setGeneratedCode(false) .setTrivia(trivias) .build(); AstNode astNode = new AstNode(token); astNode.setFromIndex(startIndex); astNode.setToIndex(endIndex); return astNode; }
@Override public Object createTerminal(Input input, int startIndex, int endIndex, List<Trivia> trivias, TokenType type) { char[] fileChars = input.input(); boolean hasByteOrderMark = fileChars.length > 0 && fileChars[0] == BYTE_ORDER_MARK; boolean isEof = GenericTokenType.EOF.equals(type); LineColumnValue lineColumnValue = tokenPosition(input, startIndex, endIndex); return new InternalSyntaxToken( lineColumnValue.line, column(hasByteOrderMark, lineColumnValue.line, lineColumnValue.column), lineColumnValue.value, createTrivias(trivias, hasByteOrderMark), isEof, isByteOrderMark(input, startIndex, endIndex)); }