コード例 #1
0
ファイル: ClassParser.java プロジェクト: rwaldron/magpie
  @Override
  public Expr parse(MagpieParser parser, Token token) {
    PositionSpan span = parser.span();
    String name = parser.consume(TokenType.NAME).getString();

    // Parse the parents, if any.
    List<String> parents = new ArrayList<String>();
    if (parser.match("is")) {
      do {
        parents.add(parser.consume(TokenType.NAME).getString());
      } while (parser.match(TokenType.COMMA));
    }

    parser.consume(TokenType.LINE);

    // Parse the doc comment if given.
    String doc = "";
    if (parser.match(TokenType.DOC_COMMENT, TokenType.LINE)) {
      doc = parser.last(2).getString();
    }

    Map<String, Field> fields = new HashMap<String, Field>();

    // Parse the body.
    while (!parser.match("end")) {
      if (parser.match("var")) parseField(parser, true, fields);
      else if (parser.match("val")) parseField(parser, false, fields);

      parser.consume(TokenType.LINE);
    }

    return Expr.class_(span.end(), doc, name, parents, fields);
  }