1- import { InputStream , CommonTokenStream } from "antlr4" ;
1+ import { InputStream , CommonTokenStream , ErrorListener } from "antlr4" ;
22import DspLexer from "./DspLexer.js" ;
33import DspParser from "./DspParser.js" ;
44import DspVisitor from "./DspVisitor.js" ;
55import DsLexer from "./DsLexer.js" ;
66import DsParser from "./DsParser.js" ;
77import DsVisitor from "./DsVisitor.js" ;
88
9+ class ThrowingErrorListener extends ErrorListener {
10+ syntaxError ( recognizer , offendingSymbol , line , column , msg , e ) {
11+ throw new Error ( `line ${ line } :${ column } ${ msg } ` ) ;
12+ }
13+ }
14+
915class ParseVisitor extends DspVisitor {
1016 visitRule_pool ( ctx ) {
1117 return ctx
@@ -104,8 +110,12 @@ class UnparseVisitor extends DsVisitor {
104110export function parse ( input ) {
105111 const chars = new InputStream ( input ) ;
106112 const lexer = new DspLexer ( chars ) ;
113+ lexer . removeErrorListeners ( ) ;
114+ lexer . addErrorListener ( new ThrowingErrorListener ( ) ) ;
107115 const tokens = new CommonTokenStream ( lexer ) ;
108116 const parser = new DspParser ( tokens ) ;
117+ parser . removeErrorListeners ( ) ;
118+ parser . addErrorListener ( new ThrowingErrorListener ( ) ) ;
109119 const tree = parser . rule_pool ( ) ;
110120 const visitor = new ParseVisitor ( ) ;
111121 return visitor . visit ( tree ) ;
@@ -114,8 +124,12 @@ export function parse(input) {
114124export function unparse ( input ) {
115125 const chars = new InputStream ( input ) ;
116126 const lexer = new DsLexer ( chars ) ;
127+ lexer . removeErrorListeners ( ) ;
128+ lexer . addErrorListener ( new ThrowingErrorListener ( ) ) ;
117129 const tokens = new CommonTokenStream ( lexer ) ;
118130 const parser = new DsParser ( tokens ) ;
131+ parser . removeErrorListeners ( ) ;
132+ parser . addErrorListener ( new ThrowingErrorListener ( ) ) ;
119133 const tree = parser . rule_pool ( ) ;
120134 const visitor = new UnparseVisitor ( ) ;
121135 return visitor . visit ( tree ) ;
0 commit comments