comparison 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
comparison
equal deleted inserted replaced
42:4e983fe32047 43:27a2167663dd
14 load('peg.js'); 14 load('peg.js');
15 PEG = module.exports; 15 PEG = module.exports;
16 load('parser.js'); 16 load('parser.js');
17 load('compiler.js'); 17 load('compiler.js');
18 load('cbackend.js'); 18 load('cbackend.js');
19 var parsed = parser.parse(text); 19 try {
20 var c = parsed.toCModule(); 20 var parsed = parser.parse(text);
21 print(c); 21 var c = parsed.toCModule();
22 print(c);
23 } catch(error) {
24 if (error.name == 'SyntaxError') {
25 print('SyntaxError on at', error.line, ',', error.column, ':', error.message);
26 var lines = text.split('\n');
27 print(lines[error.line-1]);
28 var spacer = '';
29 for (var i = 1; i < error.column; i++) {
30 if (lines[error.line-1].charAt(i-1) == '\t') {
31 spacer += ' ';
32 } else {
33 spacer += ' ';
34 }
35 }
36 print(spacer + '^');
37 } else {
38 print("Exception:");
39 var keys = Object.keys(error);
40 for (var i = 0; i < keys.length; ++i) {
41 print('\t', keys[i], error[keys[i]]);
42 }
43 }
44 }
22 } 45 }