view tpc.js @ 43:27a2167663dd

Improve compiler error reporting. Fix operator associativity. Add some more string operations and a string ops sample
author Mike Pavone <pavone@retrodev.com>
date Thu, 12 Jul 2012 22:10:58 -0700
parents 3b0503a67165
children 9dd370530f69
line wrap: on
line source

var module = {exports: {}};
var PEG;

if (arguments.length < 1) {
	print('usage: d8 tpc.js -- filename');
	os.exit();
} else {
	compileFile(arguments[0]);
}

function compileFile(filename)
{
	var text = read(filename);
	load('peg.js');
	PEG = module.exports;
	load('parser.js');
	load('compiler.js');
	load('cbackend.js');
	try {
		var parsed = parser.parse(text);
		var c = parsed.toCModule();
		print(c);
	} catch(error) {
		if (error.name == 'SyntaxError') {
			print('SyntaxError on at', error.line, ',', error.column, ':', error.message);
			var lines = text.split('\n');
			print(lines[error.line-1]);
			var spacer = '';
			for (var i = 1; i < error.column; i++) {
				if (lines[error.line-1].charAt(i-1) == '\t') {
					spacer += '    ';
				} else {
					spacer += ' ';
				}
			}
			print(spacer + '^');
		} else {
			print("Exception:");
			var keys = Object.keys(error);
			for (var i = 0; i < keys.length; ++i) {
				print('\t', keys[i], error[keys[i]]);
			}
		}
	}
}