Mercurial > repos > tabletprog
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 } |