Related articles |
---|
Get line numbers with Antlr parser u.hobelmann@web.de (Ulrich Hobelmann) (2006-05-16) |
Re: Get line numbers with Antlr parser reilles@loria.fr (Antoine Reilles) (2006-05-18) |
Re: Get line numbers with Antlr parser java.3.kkoehne@spamgourmet.org (Kai Koehne) (2006-05-18) |
Re: Get line numbers with Antlr parser u.hobelmann@web.de (Ulrich Hobelmann) (2006-05-18) |
From: | Antoine Reilles <reilles@loria.fr> |
Newsgroups: | comp.compilers |
Date: | 18 May 2006 23:51:18 -0400 |
Organization: | CIRIL, Nancy, France |
References: | 06-05-058 |
Keywords: | PCCTS |
Posted-Date: | 18 May 2006 23:51:18 EDT |
On 2006-05-16, Ulrich Hobelmann <u.hobelmann@web.de> wrote:
> Hi, I'm using the Java1.5 parser + tree parser by Mike Studman.
>
> My problem: I need to extract the line numbers from the parser.
You will have to build an AST class to be used by antlr for that,
replacing the standard one
>
> Funny thing: in one part of the parser it works, but in the tree parser
> it doesn't. In java15.g I added some printlns to print getLine() of
> some nodes, and they printed the lines. The very same nodes are also
> put into a tree structure to read by the java-tree parser (obviously).
This is not surprising: theline and colum information is not stored in
the tree being built
>
> What can / do I have to do, to get the line numbers to the high level,
> where I need it?
You can define for instance something like the following
public class MyAST extends CommonAST {
private int col = 0,line = 0;
public void initialize(Token tok) {
super.initialize(tok);
line = tok.getLine();
col = tok.getColumn();
}
public void initialize (AST ast) {
super.initialize(ast);
if (ast instanceof MyAST){
col = ((MyAST)ast).getColumn();
line = ((MyAST)ast).getLine();
}
}
public int getLine() { return line; }
public int getColumn() { return col; }
}
and use it with
parser.setASTNodeClass("MyAST");
That way, antlr will build the tree using MyAST nodes, which store the
line and column information
Have fun,
antoine
Return to the
comp.compilers page.
Search the
comp.compilers archives again.