I wanted to follow up with what I have, may be someone could offer a
better way to traverse the graph.
This shows how to get string literals from an expression node. With
this method, I'd have to specifically address each node type that may
have string literals in a number of forms (ex: ArrayLiteral)
public class JSParser {
private AstNode parseJavascript(String scriptText) throws
IOException {
Reader reader = new StringReader(scriptText);
CompilerEnvirons compilerEnv = new CompilerEnvirons();
ErrorReporter errorReporter = compilerEnv.getErrorReporter();
Parser parser = new Parser(compilerEnv, errorReporter);
return parser.parse(reader,null, 1);
}
static public void main(String[] args) {
JSParser jsp = new JSParser(); String scriptText = "keywords
= ['Rainier','Shasta','Mount Baker'];"
AstNode node = jsp.parseJavascript(scriptText);
for (Node v=node.getFirstChild(); v != null; v = v.getNext())
{
Token t;
int tp = v.getType();
if (tp == Token.EXPR_RESULT) {
ExpressionStatement expr = (ExpressionStatement)v;
AstNode exprNode = expr.getExpression();
if (exprNode.getType()==Token.ASSIGN) {
Assignment asg = (Assignment)exprNode;
AstNode valNode = asg.getRight();
if (valNode.getType()==Token.ARRAYLIT) {
ArrayLiteral arrNode =
(ArrayLiteral)valNode;
List<AstNode> elts =
arrNode.getElements();
for (AstNode eltNode : elts) {
if (eltNode.getType() == Token.STRING)
{
System.out.println(((StringLiteral)eltNode).getValue());