blob: 2ed351e382932264a17ea3a1e690802e714d5dbd [file] [log] [blame]
part of json;
/**
* JSON parser.
*/
class JsonParser extends GrammarParser {
JsonParser() : super(new JsonParserDefinition());
}
/**
* JSON parser definition.
*/
class JsonParserDefinition extends JsonGrammarDefinition {
array() => super.array().map((each) => each[1] != null ? each[1] : new List());
object() => super.object().map((each) {
var result = new LinkedHashMap();
if (each[1] != null) {
for (var element in each[1]) {
result[element[0]] = element[2];
}
}
return result;
});
trueToken() => super.trueToken().map((each) => true);
falseToken() => super.falseToken().map((each) => false);
nullToken() => super.nullToken().map((each) => null);
stringToken() => ref(stringPrimitive).trim();
numberToken() => super.numberToken().map((each) {
var floating = double.parse(each);
var integral = floating.toInt();
if (floating == integral && each.indexOf('.') == -1) {
return integral;
} else {
return floating;
}
});
stringPrimitive() => super.stringPrimitive().map((each) => each[1].join());
characterEscape() => super.characterEscape().map((each) => _escapeTable[each[1]]);
characterOctal() => super.characterOctal().map((each) {
throw new UnsupportedError('Octal characters not supported yet');
});
}