assemblyscript/tests/tokenizer.js

34 lines
1.2 KiB
JavaScript
Raw Normal View History

2018-03-16 15:45:18 +01:00
const fs = require("fs");
const path = require("path");
require("ts-node").register({ project: path.join(__dirname, "..", "src", "tsconfig.json") });
require("../src/glue/js");
const { Tokenizer, Token } = require("../src/tokenizer");
const { Source, SourceKind } = require("../src/ast");
var file = process.argv.length > 2 ? process.argv[2] : path.join(__dirname, "..", "src", "tokenizer.ts");
const text = fs.readFileSync(file).toString();
2018-03-16 15:45:18 +01:00
const tn = new Tokenizer(new Source("compiler.ts", text, SourceKind.ENTRY));
do {
let token = tn.next();
let range = tn.range();
process.stdout.write(Token[token] + " @ " + range.line + ":" + range.column);
2018-03-16 15:45:18 +01:00
if (token == Token.IDENTIFIER) {
process.stdout.write(" > " + tn.readIdentifier());
2018-03-16 15:45:18 +01:00
} else if (token == Token.INTEGERLITERAL) {
process.stdout.write(" > " + tn.readInteger());
2018-03-16 15:45:18 +01:00
} else if (token == Token.FLOATLITERAL) {
process.stdout.write(" > " + tn.readFloat());
2018-03-16 15:45:18 +01:00
} else if (token == Token.STRINGLITERAL) {
process.stdout.write(" > " + tn.readString());
2018-03-16 15:45:18 +01:00
} else if (token == Token.ENDOFFILE) {
process.stdout.write("\n");
2018-03-16 15:45:18 +01:00
break;
} else {
process.stdout.write(" > " + range.source.text.substring(range.start, range.end));
2018-03-16 15:45:18 +01:00
}
process.stdout.write("\n");
2018-03-16 15:45:18 +01:00
} while (true);