Skip to content

Commit 1529db8

Browse files
committed
Start a lax parser
1 parent a767bd3 commit 1529db8

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

js/lib/lax_parser.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const {ElectroGrammarLexer} = require('./ElectroGrammarLexer');
2+
const {ElectroGrammarParser} = require('./ElectroGrammarParser');
3+
const {ElectroGrammarListener} = require('./ElectroGrammarListener');
4+
const antlr4 = require('antlr4');
5+
6+
class ElectroGrammarToObjectListener extends ElectroGrammarListener {
7+
constructor() {
8+
super();
9+
this.obj = {};
10+
}
11+
enterCapacitance(ctx) {
12+
const cprefix_lookup = {u: 'e-6', n: 'e-9', p: 'e-12'};
13+
const number = ctx.NUMBER().getText();
14+
const cprefix = cprefix_lookup[ctx.CPREFIX().getText()];
15+
this.obj.capacitance = Number(number + cprefix);
16+
this.obj.type = 'capacitor';
17+
}
18+
}
19+
20+
function parse(input) {
21+
const chars = new antlr4.InputStream(input);
22+
const lexer = new ElectroGrammarLexer(chars);
23+
const tokens = new antlr4.CommonTokenStream(lexer);
24+
const parser = new ElectroGrammarParser(tokens);
25+
parser.buildParseTrees = true;
26+
27+
const tree = parser.electro_grammar();
28+
const listener = new ElectroGrammarToObjectListener();
29+
const walker = antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree);
30+
return listener.obj
31+
}
32+
33+
module.exports = {parse};

js/test/test_equals.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
const assert = require('better-assert')
33
44
const equals = require('../lib/equals')
5-
const parse = require('../lib/parse')
5+
const parse = require('../lib/lax_parser')
66
77
describe('equality check', () => {
88
it('does not equal components of different types', () => {

js/test/test_parse.js renamed to js/test/test_lax_parser.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*const assert = require('better-assert');
1+
const assert = require('better-assert');
22

3-
const {parse} = require('../lib/index');
3+
const {parse} = require('../lib/lax_parser')
44

55
describe('parsing', () => {
66
it("doesn't parse nonsense", () => {
@@ -267,6 +267,7 @@ describe('SMD Capacitors', () => {
267267
})
268268
})
269269

270+
/*
270271
describe('SMD Resistors', () => {
271272
it('parses a resistor', () => {
272273
const c = parse('1k 0603').component

0 commit comments

Comments
 (0)