@Override public Integer symbol( final SExpressionSymbolType ss) throws IOException { w.print(ss.getText()); return Integer.valueOf(0); } });
private static void checkType(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.TYPES.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized type keyword '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append(" Expected one of: "); sb.append(JPRAParser.TYPES); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedTypeKeyword( se, sb.toString()); } }
private static void checkKeyword(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.KEYWORDS.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized keyword '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append(" Expected one of: "); sb.append(JPRAParser.KEYWORDS); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedKeyword(se, sb.toString()); } }
private static void checkIntegerTypeKeyword(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.INTEGER_TYPES.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized integer type keyword '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append(" Expected one of: "); sb.append(JPRAParser.INTEGER_TYPES); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedIntegerTypeKeyword( se, sb.toString()); } }
private static void checkSizeFunction(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.SIZE_FUNCTIONS.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized size function '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append(" Expected one of: "); sb.append(JPRAParser.SIZE_FUNCTIONS); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedSizeFunction( se, sb.toString()); } }
private static void checkRecordFieldKeyword(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.RECORD_FIELD_KEYWORDS.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized record field keyword '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append("Expected one of: "); sb.append(JPRAParser.RECORD_FIELD_KEYWORDS); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedRecordFieldKeyword( se, sb.toString()); } }
private static void checkPackedFieldKeyword(final SExpressionSymbolType se) throws JPRACompilerParseException { if (!JPRAParser.PACKED_FIELD_KEYWORDS.contains(se.getText())) { final StringBuilder sb = new StringBuilder(256); sb.append("Unrecognized packed field keyword '"); sb.append(se.getText()); sb.append("'"); sb.append(System.lineSeparator()); sb.append(" Expected one of: "); sb.append(JPRAParser.PACKED_FIELD_KEYWORDS); sb.append(System.lineSeparator()); throw JPRACompilerParseException.unrecognizedPackedFieldKeyword( se, sb.toString()); } }
@Override public SizeExprType<Unresolved, Untyped> symbol( final SExpressionSymbolType se) throws JPRACompilerParseException { try { return new SizeExprConstant<>( JPRAParser.getExpressionLexical(se), new BigInteger(se.getText())); } catch (final NumberFormatException x) { throw JPRACompilerParseException.invalidIntegerConstant(se); } } });
@Override public Unit symbol(final SExpressionSymbolType e) throws IOException { JSXPrettyPrinterCodeStyle.this.layout.print(e.getText()); return Unit.unit(); } };
/** * @param e The expression * * @return A parser exception * * @see JPRAParseErrorCode#EXPECTED_LIST_GOT_SYMBOL */ public static JPRACompilerParseException expectedListGotSymbol( final SExpressionSymbolType e) { final StringBuilder mb = new StringBuilder(256); mb.append(" Expected: A list"); mb.append(System.lineSeparator()); mb.append(" Got: A symbol '"); mb.append(e.getText()); mb.append("'"); final String m = NullCheck.notNull(mb.toString()); return new JPRACompilerParseException( e.getLexicalInformation().map(ImmutableLexicalPosition::newFrom), JPRAParseErrorCode.EXPECTED_LIST_GOT_SYMBOL, m); }
@Override public Unit symbol(final SExpressionSymbolType e) throws IOException { JSXPrettyPrinterMarkupStyle.this.layout.print(e.getText()); return Unit.unit(); } };
private SizeExprType<Unresolved, Untyped> parseSizeInBits( final SExpressionListType le, final SExpressionSymbolType se) throws JPRACompilerParseException { Assertive.require(JPRAParser.SIZE_IN_BITS.equals(se.getText())); if (le.size() == 2) { return new SizeExprInBits<>(this.parseTypeExpression(le.get(1))); } try (final ByteArrayOutputStream bao = new ByteArrayOutputStream(256)) { this.serial.serialize(le, bao); final StringBuilder sb = new StringBuilder(128); sb.append("Syntax error."); sb.append(System.lineSeparator()); sb.append(" Expected: (size-in-bits <type-expression>)"); sb.append(System.lineSeparator()); sb.append(" Got: "); sb.append(bao.toString(StandardCharsets.UTF_8.name())); throw JPRACompilerParseException.syntaxError(le, sb.toString()); } catch (final IOException e) { throw new UnreachableCodeException(e); } }
private StatementPackageEnd<Unresolved, Untyped> parsePackageEnd( final SExpressionListType le, final SExpressionSymbolType se) throws JPRACompilerParseException { Assertive.require(JPRAParser.PACKAGE_END.equals(se.getText())); if (le.size() == 1) { return new StatementPackageEnd<>(JPRAParser.getExpressionLexical(se)); } try (final ByteArrayOutputStream bao = new ByteArrayOutputStream(256)) { this.serial.serialize(le, bao); final StringBuilder sb = new StringBuilder(128); sb.append("Syntax error."); sb.append(System.lineSeparator()); sb.append(" Expected: (package-end)"); sb.append(System.lineSeparator()); sb.append(" Got: "); sb.append(bao.toString(StandardCharsets.UTF_8.name())); throw JPRACompilerParseException.syntaxError(le, sb.toString()); } catch (final IOException e) { throw new UnreachableCodeException(e); } }
private SizeExprType<Unresolved, Untyped> parseSizeInOctets( final SExpressionListType le, final SExpressionSymbolType se) throws JPRACompilerParseException { Assertive.require(JPRAParser.SIZE_IN_OCTETS.equals(se.getText())); if (le.size() == 2) { return new SizeExprInOctets<>(this.parseTypeExpression(le.get(1))); } try (final ByteArrayOutputStream bao = new ByteArrayOutputStream(256)) { this.serial.serialize(le, bao); final StringBuilder sb = new StringBuilder(128); sb.append("Syntax error."); sb.append(System.lineSeparator()); sb.append(" Expected: (size-in-octets <type-expression>)"); sb.append(System.lineSeparator()); sb.append(" Got: "); sb.append(bao.toString(StandardCharsets.UTF_8.name())); throw JPRACompilerParseException.syntaxError(le, sb.toString()); } catch (final IOException e) { throw new UnreachableCodeException(e); } }
@Override public TypeReference parseTypeReference( final SExpressionSymbolType se) throws JPRACompilerParseException { NullCheck.notNull(se); final String text = se.getText(); final Optional<ImmutableLexicalPositionType<Path>> lex = se.getLexicalInformation().map(ImmutableLexicalPosition::newFrom); { final Matcher m = JPRAReferenceParser.PATTERN_PT.matcher(text); if (m.matches()) { final PackageNameUnqualified p_name = new PackageNameUnqualified(lex, m.group(1)); final TypeName t_name = new TypeName(lex, m.group(2)); return new TypeReference(Optional.of(p_name), t_name); } } { final Matcher m = TypeName.PATTERN.matcher(text); if (m.matches()) { return new TypeReference(Optional.empty(), new TypeName(lex, text)); } } throw JPRAReferenceParser.badTypeReference(this.serial, se); }
private static PackageNameUnqualified parsePackageNameUnqualified( final SExpressionSymbolType s) throws JPRACompilerParseException { try { return new PackageNameUnqualified( JPRAParser.getExpressionLexical(s), s.getText()); } catch (final RequireViolation e) { throw JPRACompilerParseException.badPackageName(s, e.getMessage()); } }
private static TypeName parseTypeName(final SExpressionSymbolType name) throws JPRACompilerParseException { try { return new TypeName( JPRAParser.getExpressionLexical(name), name.getText()); } catch (final RequireViolation e) { throw JPRACompilerParseException.badTypeName(name, e.getMessage()); } }
private static FieldName parseFieldName(final SExpressionSymbolType name) throws JPRACompilerParseException { try { return new FieldName( JPRAParser.getExpressionLexical(name), name.getText()); } catch (final RequireViolation e) { throw JPRACompilerParseException.badFieldName(name, e.getMessage()); } }
@Override public SizeExprType<Unresolved, Untyped> list( final SExpressionListType le) throws JPRACompilerParseException { if (le.size() == 0) { throw JPRACompilerParseException.expectedNonEmptyList(le); } final SExpressionSymbolType se = JPRAParser.requireSymbol(le.get(0)); JPRAParser.checkSizeFunction(se); switch (se.getText()) { case JPRAParser.SIZE_IN_BITS: { return JPRAParser.this.parseSizeInBits(le, se); } case JPRAParser.SIZE_IN_OCTETS: { return JPRAParser.this.parseSizeInOctets(le, se); } } throw new UnreachableCodeException(); }
private static PackageNameQualified parsePackageNameQualified( final SExpressionSymbolType name) throws JPRACompilerParseException { final String text = name.getText(); Assertive.require(!text.isEmpty()); final String[] segments = text.split("\\."); final Optional<ImmutableLexicalPositionType<Path>> ilex = JPRAParser.getExpressionLexical(name); final MutableList<PackageNameUnqualified> names_base = new FastList<>(); for (int index = 0; index < segments.length; ++index) { final String raw = segments[index]; try { names_base.add(new PackageNameUnqualified(ilex, raw)); } catch (final RequireViolation e) { throw JPRACompilerParseException.badPackageName(name, e.getMessage()); } } final ImmutableList<PackageNameUnqualified> names = names_base.toImmutable(); return new PackageNameQualified(names); }