1- import { AbstractParseTreeVisitor } from "antlr4ts/tree/AbstractParseTreeVisitor"
21import { FormulaFunction } from "./formula/formula.type"
32import { globalFunctionRegistry } from "./formula/registry"
43import {
@@ -18,7 +17,7 @@ import {
1817 VariableContext ,
1918 VariableExprContext ,
2019} from "./grammar/FormulaParser"
21- import type { FormulaParserVisitor } from "./grammar/FormulaParserVisitor"
20+ import FormulaParserVisitor from "./grammar/FormulaParserVisitor"
2221import {
2322 ArgumentListResult ,
2423 ReturnType ,
@@ -28,10 +27,7 @@ import {
2827 type VariableResult ,
2928} from "./types"
3029
31- export class FormulaVisitor
32- extends AbstractParseTreeVisitor < ExpressionResult >
33- implements FormulaParserVisitor < ExpressionResult >
34- {
30+ export class FormulaVisitor extends FormulaParserVisitor < ExpressionResult > {
3531 private variables : Set < string > = new Set ( )
3632
3733 private assertType ( result : ExpressionResult , types : ReturnType [ ] ) : boolean {
@@ -53,11 +49,11 @@ export class FormulaVisitor
5349 return true
5450 }
5551
56- visitFormula ( ctx : FormulaContext ) : ExpressionResult {
52+ visitFormula = ( ctx : FormulaContext ) : ExpressionResult => {
5753 return this . visit ( ctx . expression ( ) )
5854 }
5955
60- visitMulDivModExpr ( ctx : MulDivModExprContext ) : ExpressionResult {
56+ visitMulDivModExpr = ( ctx : MulDivModExprContext ) : ExpressionResult => {
6157 const left = this . visit ( ctx . expression ( 0 ) ) as NumberResult | VariableResult
6258 const right = this . visit ( ctx . expression ( 1 ) ) as NumberResult | VariableResult
6359
@@ -70,11 +66,11 @@ export class FormulaVisitor
7066 name : op ,
7167 arguments : [ left , right ] ,
7268 returnType : "number" ,
73- value : ctx . text ,
69+ value : ctx . getText ( ) ,
7470 }
7571 }
7672
77- visitAddSubExpr ( ctx : AddSubExprContext ) : ExpressionResult {
73+ visitAddSubExpr = ( ctx : AddSubExprContext ) : ExpressionResult => {
7874 const left = this . visit ( ctx . expression ( 0 ) ) as NumberResult | VariableResult
7975 const right = this . visit ( ctx . expression ( 1 ) ) as NumberResult | VariableResult
8076
@@ -87,11 +83,11 @@ export class FormulaVisitor
8783 name : op ,
8884 arguments : [ left , right ] ,
8985 returnType : "number" ,
90- value : ctx . text ,
86+ value : ctx . getText ( ) ,
9187 }
9288 }
9389
94- visitComparisonExpr ( ctx : ComparisonExprContext ) : ExpressionResult {
90+ visitComparisonExpr = ( ctx : ComparisonExprContext ) : ExpressionResult => {
9591 const left = this . visit ( ctx . expression ( 0 ) )
9692 const right = this . visit ( ctx . expression ( 1 ) )
9793
@@ -104,11 +100,11 @@ export class FormulaVisitor
104100 name : op ,
105101 arguments : [ left , right ] ,
106102 returnType : "boolean" ,
107- value : ctx . text ,
103+ value : ctx . getText ( ) ,
108104 }
109105 }
110106
111- visitAndExpr ( ctx : AndExprContext ) : ExpressionResult {
107+ visitAndExpr = ( ctx : AndExprContext ) : ExpressionResult => {
112108 const left = this . visit ( ctx . expression ( 0 ) )
113109 const right = this . visit ( ctx . expression ( 1 ) )
114110
@@ -120,11 +116,11 @@ export class FormulaVisitor
120116 name : "AND" ,
121117 arguments : [ left , right ] ,
122118 returnType : "boolean" ,
123- value : ctx . text ,
119+ value : ctx . getText ( ) ,
124120 }
125121 }
126122
127- visitOrExpr ( ctx : OrExprContext ) : ExpressionResult {
123+ visitOrExpr = ( ctx : OrExprContext ) : ExpressionResult => {
128124 const left = this . visit ( ctx . expression ( 0 ) )
129125 const right = this . visit ( ctx . expression ( 1 ) )
130126
@@ -136,44 +132,44 @@ export class FormulaVisitor
136132 name : "OR" ,
137133 arguments : [ left , right ] ,
138134 returnType : "boolean" ,
139- value : ctx . text ,
135+ value : ctx . getText ( ) ,
140136 }
141137 }
142138
143- visitNotExpr ( ctx : NotExprContext ) : ExpressionResult {
139+ visitNotExpr = ( ctx : NotExprContext ) : ExpressionResult => {
144140 const expr = this . visit ( ctx . expression ( ) )
145141 this . assertType ( expr , [ "boolean" ] )
146142 return {
147143 type : "functionCall" ,
148144 name : "NOT" ,
149145 arguments : [ expr ] ,
150146 returnType : "boolean" ,
151- value : ctx . text ,
147+ value : ctx . getText ( ) ,
152148 }
153149 }
154150
155- visitFunctionExpr ( ctx : FunctionExprContext ) : ExpressionResult {
151+ visitFunctionExpr = ( ctx : FunctionExprContext ) : ExpressionResult => {
156152 return this . visit ( ctx . functionCall ( ) )
157153 }
158154
159- visitVariableExpr ( ctx : VariableExprContext ) : ExpressionResult {
155+ visitVariableExpr = ( ctx : VariableExprContext ) : ExpressionResult => {
160156 return this . visit ( ctx . variable ( ) )
161157 }
162158
163- visitNumberExpr ( ctx : NumberExprContext ) : ExpressionResult {
164- return { type : "number" , value : Number ( ctx . NUMBER ( ) . text ) }
159+ visitNumberExpr = ( ctx : NumberExprContext ) : ExpressionResult => {
160+ return { type : "number" , value : Number ( ctx . NUMBER ( ) . getText ( ) ) }
165161 }
166162
167- visitStringExpr ( ctx : StringExprContext ) : ExpressionResult {
168- return { type : "string" , value : ctx . STRING ( ) . text . slice ( 1 , - 1 ) }
163+ visitStringExpr = ( ctx : StringExprContext ) : ExpressionResult => {
164+ return { type : "string" , value : ctx . STRING ( ) . getText ( ) . slice ( 1 , - 1 ) }
169165 }
170166
171- visitParenExpr ( ctx : ParenExprContext ) : ExpressionResult {
167+ visitParenExpr = ( ctx : ParenExprContext ) : ExpressionResult => {
172168 return this . visit ( ctx . expression ( ) )
173169 }
174170
175- visitFunctionCall ( ctx : FunctionCallContext ) : ExpressionResult {
176- const funcName = ctx . IDENTIFIER ( ) . text as FormulaFunction
171+ visitFunctionCall = ( ctx : FunctionCallContext ) : ExpressionResult => {
172+ const funcName = ctx . IDENTIFIER ( ) . getText ( ) as FormulaFunction
177173 const args = ctx . argumentList ( ) ? ( this . visit ( ctx . argumentList ( ) ! ) as FunctionExpressionResult ) : undefined
178174
179175 if ( ! globalFunctionRegistry . isValid ( funcName ) ) {
@@ -191,20 +187,20 @@ export class FormulaVisitor
191187 name : funcName ,
192188 arguments : args ?. arguments ?? [ ] ,
193189 returnType,
194- value : ctx . text ,
190+ value : ctx . getText ( ) ,
195191 }
196192 }
197193
198- visitArgumentList ( ctx : ArgumentListContext ) : ArgumentListResult {
199- const args = ctx . expression ( ) . map ( ( expr ) => this . visit ( expr ) )
194+ visitArgumentList = ( ctx : ArgumentListContext ) : ArgumentListResult => {
195+ const args = ctx . expression_list ( ) . map ( ( expr ) => this . visit ( expr ) )
200196 return {
201197 type : "argumentList" ,
202198 arguments : args ,
203199 }
204200 }
205- visitVariable ( ctx : VariableContext ) : VariableResult {
206- const variableName = ctx . IDENTIFIER ( ) . text
207- const raw = ctx . text
201+ visitVariable = ( ctx : VariableContext ) : VariableResult => {
202+ const variableName = ctx . IDENTIFIER ( ) . getText ( )
203+ const raw = ctx . getText ( )
208204 this . variables . add ( variableName )
209205 return { type : "variable" , value : raw , variable : variableName }
210206 }
0 commit comments