[antlr-interest] Re: Interesting Problem
lgcraymer
lgc at mail1.jpl.nasa.gov
Thu Sep 12 13:52:40 PDT 2002
Richard--
A brute force method would be to change your top-level definition to
input:
( "create" ((table)=> table)?
| ~"create"
)* EOF
;
with table being your createTable rule minus the "create" and all
actions confined to table and the rules that it invokes.
Adding a token stream filter would then improve performance--the
action in the ~"create" alternative would be to toggle nextToken to
skip tokens until "create" is encountered--but not functionality.
--Loring
--- In antlr-interest at y..., mzukowski at y... wrote:
> Check out a similar problem/solution at
> http://www.codetransform.com/filterexample.html
>
> I use a parser to find particular constructs and pass the rest on.
>
> Or, you might be able to do it all in the lexer with a filter rule.
See the
> article about using antlr like sed on antlr.org.
>
> Monty
> -----Original Message-----
> From: Hensley, Richard [mailto:richard.hensley at m...]
> Sent: Thursday, September 12, 2002 1:16 PM
> To: 'antlr-interest at y...'
> Subject: [antlr-interest] Interesting Problem
>
>
> I have an interesting parsing problem. I want dig certain context
free
> constructs out of a file, while ignoring all the other constructs in
the
> file. My specific case is that I have a file with a bunch of SQL in
it, but
> all I really care about are the create table statements. The create
table
> statements I'm concerned with can be parsed with the following
rules:
> createTable
> : "create" (ID)* "table" ID LPAREN columns RPAREN
> ;
>
> columns
> : column (COMMA column)*
> ;
>
> column
> : name datatype (ID)*
> ;
>
> datatype
> : ( "varchar" (size)*
> | "varchar2" (size)*
> | "number" (size)*
> | "date"
> | "integer"
> | "long" ("raw")*
> )
> ;
>
> size
> : LPAREN CARDINAL RPAREN
> ;
> To solve this problem, I'm thinking of using token stream filters,
but I
> can't look ahead in a token stream filter so that I could recognize
when I'm
> in a create table statement.
> My basic design would be to use a filter that turns on output of
tokens when
> in a create table statement, and the parser grammar would have a
semantic
> rule that would turn off token output when the create table
statement has
> been fully recognized.
> Does anybody have any experience with such a thing?
> Richard Hensley
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list