[antlr-interest] Lexer grammar for filtering
Bart Kiers
bkiers at gmail.com
Mon Oct 17 02:20:42 PDT 2011
Hi Balazs,
Since PC is not a parser rule, you need to account for the space(s) between
'PC_HASH_VALUE' and DIGIT.
And since you've set `filter=true`, you don't need a fall-through rule ELSE,
AFAIK.
Regards,
Bart.
On Mon, Oct 17, 2011 at 11:15 AM, Balazs Varnai <bvarnai at gmail.com> wrote:
> Hi All,
>
> I have a simple grammar to collapse white-spaces and comment from a c
> source
> code input. Also I would like to filter out some variables with a specific
> name. These have a strict format, so no "real" C parsing needed.
> Works fine but for example a line "#define PC_HASH_VALUE 1" is not
> recognized. As far I remember from previous ANTLR usage, this was working
> straight away. Any suggestions? Thanks!
>
> /* **** [ CODE ] **** */
> lexer grammar Collapse;
>
> options {
> language = Java;
> filter = true;
> }
> @header {
> package rewriter;
> import java.util.*;
> import java.io.*;
>
> }
>
> @members {
> PrintStream out;
>
> public Collapse(CharStream input, PrintStream out) {
> this(input);
> this.out = out;
> }
> }
>
> PC: 'PC_HASH_VALUE' text=DIGIT {$channel=HIDDEN;};
>
> fragment
> DIGIT: '0'..'9';
>
> COMMENT
> : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
> | '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
> ;
>
> WS : ( ' '
> | '\t'
> | '\r'
> | '\n'
> ) {$channel=HIDDEN;}
> ;
>
> ELSE : c=. {out.print((char)$c);} ; // match any char and emit
> /* **** [ END ] **** */
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
More information about the antlr-interest
mailing list