[antlr-interest] StackOverflow Error
Terence Parr
parrt at cs.usfca.edu
Mon Dec 25 08:55:06 PST 2006
Hi. You've made an infinite loop with your tail recursion in those
aggr. and remaining rules.
Ter
On Dec 25, 2006, at 2:58 AM, Debabrata Pani wrote:
> hi ,
> I have a grammar and i have generated parsers using ANTLR.
> for smaller files the program runs without error,
> but for even reasonably medium sized ones, 70kBytes, the parser
> throws a
> STACK OVERFLOW exception
> The grammar was for parsing Open Financial Exchange files, which is
> based on SGML.
>
> Sample OFX file:
>
> OFXHEADER:100
> DATA:OFXSGML
> VERSION:102
> SECURITY:NONE
> ENCODING:USASCII
> CHARSET:1252
> COMPRESSION:NONE
> OLDFILEUID:NONE
> NEWFILEUID:NONE
>
> <OFX>
> <SIGNONMSGSRSV1>
> <SONRS>
> <STATUS>
> <CODE>0
> <SEVERITY>INFO
> </STATUS>
> <DTSERVER>20051124163122
> <LANGUAGE>ENG
> </SONRS>
> </SIGNONMSGSRSV1>
> <CREDITCARDMSGSRSV1>
> <CCSTMTTRNRS>
> <TRNUID>0
> <STATUS>
> <CODE>0
> <SEVERITY>INFO
> </STATUS>
> <CCSTMTRS>
> <CURDEF>USD
> <CCACCTFROM>
> <ACCTID>XXXXXXXXXXXXXXXX
> </CCACCTFROM>
> <BANKTRANLIST>
> <DTSTART>20051003120000
> <DTEND>20051025120000
> <STMTTRN>
> <TRNTYPE>DEBIT
> <DTPOSTED>20051002180000
> <TRNAMT>-35.06
> <FITID>3013062760001
> <SIC>5499
> <NAME>Random graphs
> </STMTTRN>
> ...
>
> The grammars is :
>
> class OfxParser extends Parser;
> options
> {
> k=2
> }
> ofx_entity : ofx_header NEWLINE ofx_aggregate EOF
> ;
>
> ofx_header: (n:NAME COLON m:NAME)NEWLINE ofx_header
>
> |
>
> ;
>
> ofx_aggregate : tag_open (WS|NEWLINE)* remaining
> | tag_closed (WS|NEWLINE)* ofx_aggregate
>
> |
> ;
>
> remaining : ofx_aggregate
> | element (NEWLINE)* ofx_aggregate
>
> ;
> tag_open : LT n:NAME GT
>
> ;
>
> tag_closed : LT FSLASH n:NAME GT
>
> ;
>
>
> element : (n:NAME (WS|COLON|FSLASH)*)+
>
> ;
>
> The error thrown was:
>
> java.lang.StackOverflowError
> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
> (Unknown Source)
> at java.lang.reflect.Constructor.newInstance(Unknown Source)
> at java.lang.Class.newInstance0(Unknown Source)
> at java.lang.Class.newInstance (Unknown Source)
> at antlr.CharScanner.makeToken(CharScanner.java:175)
> at com.project.finance.importer.ofx.OFXLexer.mLT(OFXLexer.java:
> 379)
> at com.project.finance.importer.ofx.OFXLexer.nextToken
> (OFXLexer.java :92)
> at antlr.TokenBuffer.fill(TokenBuffer.java:69)
> at antlr.TokenBuffer.LA(TokenBuffer.java:80)
> at antlr.LLkParser.LA(LLkParser.java:52)
> at com.project.finance.importer.ofx.OfxParser.element
> (OfxParser.java :304)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:239)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:234)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:192)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:253)
> at com.project.finance.importer.ofx.OfxParser.ofx_aggregate
> (OfxParser.java:166)
> at com.project.finance.importer.ofx.OfxParser.remaining
> (OfxParser.java:234)
> ....
More information about the antlr-interest
mailing list