[antlr-interest] StackOverflow Error

Debabrata Pani debabrata.pani at gmail.com
Mon Dec 25 02:58:16 PST 2006


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)
   ....
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20061225/5ec7d8cd/attachment.html 


More information about the antlr-interest mailing list