How to convert add line numbers to the parseTree.

53 views
Skip to first unread message

kasun kavinda

unread,
Sep 13, 2019, 9:57:05 PM9/13/19
to antlr-discussion
I am trying to build a javascript parser using the antlr.
I want to Add line numbers of my source code to the parse Tree. Is there a way to do that. for now it gives the below output below 

(program (sourceElements (sourceElement (statement (functionDeclaration function a ( ) { (functionBody (sourceElements (sourceElement (statement (variableStatement (varModifier var) (variableDeclarationList (variableDeclaration a = (singleExpression (literal (numericLiteral 10))))) (eos ;)))) (sourceElement (statement (ifStatement if ( (expressionSequence (singleExpression (singleExpression a) > (singleExpression (literal (numericLiteral 20))))) ) (statement (block { (statementList (statement (expressionStatement (expressionSequence (singleExpression (singleExpression a) = (singleExpression (singleExpression a) + (singleExpression (literal (numericLiteral 1)))))) (eos ;)))) })) else (statement (block { (statementList (statement (expressionStatement (expressionSequence (singleExpression (singleExpression a) = (singleExpression (singleExpression a) - (singleExpression (literal (numericLiteral 1)))))) (eos ;)))) }))))))) })))) <EOF>)

But i need a JSON output like this(This output is from nashorn parser)

[{"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":12},"source":"nashorn"},"rest":null,"expression":false,"defaults":[],"generator":false,"id":{"loc":{"start":{"line":1,"column":9},"end":{"line":1,"column":10},"source":"nashorn"},"name":"a","type":"Identifier"},"type":"FunctionDeclaration","params":[],"body":{"loc":{"start":{"line":1,"column":12},"end":{"line":7,"column":13},"source":"nashorn"},"type":"BlockStatement","body":[{"loc":{"start":{"line":2,"column":12},"end":{"line":2,"column":21},"source":"nashorn"},"type":"VariableDeclaration","declarations":[{"loc":{"start":{"line":2,"column":16},"end":{"line":2,"column":17},"source":"nashorn"},"init":{"loc":{"start":{"line":2,"column":19},"end":{"line":2,"column":21},"source":"nashorn"},"type":"Literal","value":10},"id":{"loc":{"start":{"line":2,"column":16},"end":{"line":2,"column":17},"source":"nashorn"},"name":"a","type":"Identifier"},"type":"VariableDeclarator"}]},{"loc":{"start":{"line":3,"column":12},"end":{"line":7,"column":13},"source":"nashorn"},"test":{"loc":{"start":{"line":3,"column":15},"end":{"line":3,"column":19},"source":"nashorn"},"left":{"loc":{"start":{"line":3,"column":15},"end":{"line":3,"column":16},"source":"nashorn"},"name":"a","type":"Identifier"},"right":{"loc":{"start":{"line":3,"column":17},"end":{"line":3,"column":19},"source":"nashorn"},"type":"Literal","value":20},"type":"BinaryExpression","operator":">"},"alternate":{"loc":{"start":{"line":5,"column":17},"end":{"line":7,"column":13},"source":"nashorn"},"type":"BlockStatement","body":[{"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":21},"source":"nashorn"},"expression":{"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":21},"source":"nashorn"},"left":{"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":17},"source":"nashorn"},"name":"a","type":"Identifier"},"right":{"loc":{"start":{"line":6,"column":18},"end":{"line":6,"column":21},"source":"nashorn"},"left":{"loc":{"start":{"line":6,"column":18},"end":{"line":6,"column":19},"source":"nashorn"},"name":"a","type":"Identifier"},"right":{"loc":{"start":{"line":6,"column":20},"end":{"line":6,"column":21},"source":"nashorn"},"type":"Literal","value":1},"type":"BinaryExpression","operator":"-"},"type":"AssignmentExpression","operator":"="},"type":"ExpressionStatement"}]},"consequent":{"loc":{"start":{"line":3,"column":20},"end":{"line":5,"column":13},"source":"nashorn"},"type":"BlockStatement","body":[{"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":21},"source":"nashorn"},"expression":{"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":21},"source":"nashorn"},"left":{"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":17},"source":"nashorn"},"name":"a","type":"Identifier"},"right":{"loc":{"start":{"line":4,"column":18},"end":{"line":4,"column":21},"source":"nashorn"},"left":{"loc":{"start":{"line":4,"column":18},"end":{"line":4,"column":19},"source":"nashorn"},"name":"a","type":"Identifier"},"right":{"loc":{"start":{"line":4,"column":20},"end":{"line":4,"column":21},"source":"nashorn"},"type":"Literal","value":1},"type":"BinaryExpression","operator":"+"},"type":"AssignmentExpression","operator":"="},"type":"ExpressionStatement"}]},"type":"IfStatement"}]}}]

How to do that with the antlr4 in java.?

Reply all
Reply to author
Forward
0 new messages