[antlr-interest] How to retrieve free-form text between delimiters?
Andrew Lentvorski
bsder at allcaps.org
Mon Jul 23 00:46:47 PDT 2007
I'm trying to create a parser for a VCD (Verilog change dump) file. I'm
trying to pull the free-form text from between delimiters. My VCD file
looks like this:
$date
Fri Jan 26 11:28:51 2007
$end
$comment
Could be anything! 12345 #12345
$end
$comment Could be anything 2! 12345 #12345 $end
How do I retreive the text from between the $date ... $end or $comment
... $end pairs?
I tried this grammar:
grammar vcdfile;
vcd : declaration_command+ EOF
;
declaration_command
: date_dcmd | comment_dcmd
;
date_dcmd: '$date' ( options {greedy=false;} : . )* '$end'
{System.out.println("D:"+$date_dcmd.text);} ;
comment_dcmd: '$comment' ( options {greedy=false;} : . )* '$end'
{System.out.println("C:"+$comment_dcmd.text);};
INT : '0'..'9'+;
WS : (' '|'\t'|'\n'|'\r')+ {skip();} ;
However, I wind up with a bunch of errors like this:
line 2:8 no viable alternative at character 'F'
line 2:9 no viable alternative at character 'r'
line 2:10 no viable alternative at character 'i'
<... lots more deleted ...>
And output like this:
D:$date261128512007$end
C:$comment1234512345$end
C:$comment21234512345$end
Any suggestions as to what I need to do? I thought that a . was
supposed to match *anything*, but clearly my definition of anything and
ANTLR's definition of anything don't correspond.
Any advice for solving this?
Thanks,
-a
More information about the antlr-interest
mailing list