Skip to content

Commit af0107a

Browse files
committed
Merge branch 'python3' into antlr
2 parents d6396a6 + a948dc8 commit af0107a

29 files changed

Lines changed: 9204 additions & 82 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ coverage/
22
.nyc_output/
33
node_modules/
44
test-lib/
5+
6+
js/**/ElectroGrammar*
7+
python3/**/ElectroGrammar*

Makefile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ ANTLR=antlr4 -Xexact-output-dir
22
GRAMMAR=src/ElectroGrammar.g4
33
GRAMMAR_FILES=$(wildcard src/*.g4)
44

5-
all: js
5+
all: js python3
66

77
java: $(GRAMMAR) $(GRAMMAR_FILES)
88
$(ANTLR) $< -o java/
@@ -11,11 +11,12 @@ java: $(GRAMMAR) $(GRAMMAR_FILES)
1111
clean-java:
1212
rm -f java/*
1313

14+
1415
python3: $(GRAMMAR) $(GRAMMAR_FILES)
15-
$(ANTLR) -Dlanguage=Python3 $< -o python3/
16+
$(ANTLR) -Dlanguage=Python3 $< -o python3/electro_grammar/
1617

1718
clean-python3:
18-
rm -f python3/*
19+
rm -f python3/electro_grammar/ElectroGrammar*
1920

2021

2122
js: $(GRAMMAR) $(GRAMMAR_FILES)
@@ -24,6 +25,7 @@ js: $(GRAMMAR) $(GRAMMAR_FILES)
2425
clean-js:
2526
rm -f js/lib/ElectroGrammar*
2627

28+
2729
clean: clean-java clean-python3 clean-js
2830

2931
.PHONY: all clean python3 clean-python3 java clean-java clean js clean-js

js/bin/electro-grammar.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
var lib = require('../lib/index.js');
2+
3+
var input = process.argv[2];
4+
console.log(lib.parse(input));

js/lib/index.js

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,33 @@ var {ElectroGrammarParser} = require('./ElectroGrammarParser');
33
var {ElectroGrammarListener} = require('./ElectroGrammarListener');
44
var antlr4 = require('antlr4');
55

6-
var KeyPrinter = function() {
6+
var ElectroGrammarToObjectListener = function() {
77
ElectroGrammarListener.call(this);
8+
this.obj = {};
89
return this;
910
};
1011

11-
KeyPrinter.prototype = Object.create(ElectroGrammarListener.prototype);
12-
KeyPrinter.prototype.constructor = KeyPrinter;
12+
ElectroGrammarToObjectListener.prototype = Object.create(ElectroGrammarListener.prototype);
13+
ElectroGrammarToObjectListener.prototype.constructor = ElectroGrammarToObjectListener;
1314

14-
KeyPrinter.prototype.exitCapacitance = function(ctx) {
15-
var prefix = ctx
16-
.CPREFIX()
17-
.getText()
18-
.toLowerCase();
19-
if (prefix === 'micro') {
20-
prefix = 'u';
21-
} else {
22-
prefix = prefix[0];
23-
}
24-
var number = Number(ctx.NUMBER().getText());
25-
console.log('capacitance', `${number}${prefix}F`);
15+
ElectroGrammarToObjectListener.prototype.enterCapacitance = function(ctx) {
16+
var cprefix_lookup = {'u': 10e-6, 'n': 10e-9, 'p': 10e-12};
17+
var number = Number(ctx.NUMBER().getText());
18+
var cprefix = cprefix_lookup[ctx.CPREFIX().getText()];
19+
this.obj['capacitance'] = number * cprefix;
2620
};
2721

28-
var input = '100 micro farad \n';
29-
var chars = new antlr4.InputStream(input);
30-
var lexer = new ElectroGrammarLexer(chars);
31-
var tokens = new antlr4.CommonTokenStream(lexer);
32-
var parser = new ElectroGrammarParser(tokens);
33-
parser.buildParseTrees = true;
34-
var tree = parser.capacitance();
35-
var printer = new KeyPrinter();
36-
antlr4.tree.ParseTreeWalker.DEFAULT.walk(printer, tree);
22+
var parse = function(input) {
23+
var chars = new antlr4.InputStream(input);
24+
var lexer = new ElectroGrammarLexer(chars);
25+
var tokens = new antlr4.CommonTokenStream(lexer);
26+
var parser = new ElectroGrammarParser(tokens);
27+
parser.buildParseTrees = true;
28+
29+
var tree = parser.electro_grammar();
30+
var listener = new ElectroGrammarToObjectListener();
31+
var walker = antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree);
32+
return listener.obj;
33+
};
34+
35+
module.exports = {'parse': parse};

0 commit comments

Comments
 (0)