| 109 | } |
| 110 | |
| 111 | export function parseCode( |
| 112 | code: string, |
| 113 | errorListener: CashScriptErrorListener = ThrowingErrorListener.INSTANCE, |
| 114 | ): Ast { |
| 115 | const syntaxErrorListener = new ForwardingErrorListener(errorListener); |
| 116 | |
| 117 | // Lexing (throwing on errors) |
| 118 | const inputStream = new CharStream(code); |
| 119 | const lexer = new CashScriptLexer(inputStream); |
| 120 | lexer.removeErrorListeners(); |
| 121 | lexer.addErrorListener(syntaxErrorListener); |
| 122 | const tokenStream = new CommonTokenStream(lexer); |
| 123 | |
| 124 | // Parsing (throwing on errors) |
| 125 | const parser = new CashScriptParser(tokenStream); |
| 126 | parser.removeErrorListeners(); |
| 127 | parser.addErrorListener(syntaxErrorListener); |
| 128 | const parseTree = parser.sourceFile(); |
| 129 | syntaxErrorListener.throwFirstError(); |
| 130 | |
| 131 | // AST building |
| 132 | const ast = new AstBuilder(parseTree).build() as Ast; |
| 133 | |
| 134 | return ast; |
| 135 | } |