Note that there are some explanatory texts on larger screens.

plurals
  1. POANTLR 3 parsing problem
    text
    copied!<p>I have written an <em>ANTLR 3</em> grammar for parsing <em>TaskJuggler III</em> bookings files (see below).</p> <p>On line</p> <blockquote> <p>project prj "Sample project" "1.0" 2010-10-24-00:00-+0200 - 2010-11-23-09:00-+0100 {</p> </blockquote> <p>I'm getting following errors:</p> <blockquote> <p>line 1:42 mismatched character '-' expecting set '0'..'9'</p> <p>line 1:48 mismatched character ':' expecting set '0'..'9'</p> <p>line 1:67 mismatched character '-' expecting set '0'..'9'</p> <p>line 1:73 mismatched character ':' expecting set '0'..'9'</p> </blockquote> <p>Thereafter, an <em>OutOfMemory</em> error occurs.</p> <p>Here is the relevant part of the grammar:</p> <blockquote> <p>bookingsFile returns [DefaultBookingsFile bookingsFile]</p> <pre><code>: { bookingsFile = new DefaultBookingsFile(); } projectHeader projectIds (resourceDeclaration)* (task)* ( suppStmt=supplementStatement </code></pre> <p>{bookingsFile.addSupplementStatement( $suppStmt.suppStmt ); }</p> <pre><code> )* ; </code></pre> <p>projectHeader</p> <pre><code>: 'project prj "' ANY_TEXT '" "1.0"' TJ3_BOOKING_TIME '-' </code></pre> <p>TJ3_BOOKING_TIME '{'</p> <pre><code> '}' ; </code></pre> <p>TJ3_BOOKING_TIME</p> <pre><code>: DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT </code></pre> <p>'-' DIGIT DIGIT ':' DIGIT DIGIT '-' TIMEZONE</p> <pre><code>; </code></pre> <p>TIMEZONE</p> <pre><code>: ('+'|'-')DIGIT DIGIT DIGIT DIGIT ; </code></pre> </blockquote> <p>Question: What am I doing wrong?</p> <p>Thanks in advance</p> <p>Dmitri</p> <p>P. S.: Full version of the grammar is available at</p> <p><a href="http://bazaar.launchpad.net/~dp-sw-dev/pcc/prototype1/files/head%3A/src/main/java/at/silverstrike/pcc/impl/tj3bookingsparser/grammar/" rel="nofollow">http://bazaar.launchpad.net/~dp-sw-dev/pcc/prototype1/files/head%3A/src/main/java/at/silverstrike/pcc/impl/tj3bookingsparser/grammar/</a></p> <p>and below</p> <pre><code>grammar Bookings; options { backtrack=true; memoize=true; } @header { package at.silverstrike.pcc.impl.tj3bookingsparser.grammar; } @lexer::header { package at.silverstrike.pcc.impl.tj3bookingsparser.grammar; } bookingsFile returns [DefaultBookingsFile bookingsFile] : { bookingsFile = new DefaultBookingsFile(); } projectHeader projectIds (resourceDeclaration)* (task)* ( suppStmt=supplementStatement {bookingsFile.addSupplementStatement( $suppStmt.suppStmt ); } )* ; projectHeader : 'project prj "' ANY_TEXT '" "1.0"' TJ3_BOOKING_TIME '-' TJ3_BOOKING_TIME '{' '}' ; projectIds : 'projectids prj' ; resourceDeclaration : 'resource' TJ3_IDENTIFIER TJ3_STRING ; task : 'task' TJ3_IDENTIFIER TJ3_STRING '{' ANY_TEXT '}' ; supplementStatement returns [DefaultSupplementStatement suppStmt] : { suppStmt = new DefaultSupplementStatement(); } 'supplement task' taskId=TJ3_DOTTED_TASK_IDENTIFIER { suppStmt.setTaskId($taskId.text); } '{' ( bStmt=bookingStatement {suppStmt.addBookingStatement( $bStmt.stmt ); } )* ANY_TEXT '}' ; bookingStatement returns [DefaultBookingStatement stmt] : { stmt = new DefaultBookingStatement(); } TJ3_IDENTIFIER ':' 'booking' resource=TJ3_IDENTIFIER { stmt.setResource($resource.text); } ib1=indBooking { stmt.addIndBooking($ib1.indBooking); } ( ',' ib2=indBooking { stmt.addIndBooking($ib2.indBooking); } )* overTimeEtc ; indBooking returns [DefaultIndBooking indBooking] : startTime=TJ3_BOOKING_START_TIME '+' duration=TJ3_DURATION 'h' { $indBooking = new DefaultIndBooking($startTime.text, $duration.text); } ; overTimeEtc : '{' ANY_TEXT '}' ; TJ3_IDENTIFIER : ('a'..'Z'|'A'..'Z') ('a'..'Z'|'A'..'Z'|'0'..'9'|'_')* ; DIGIT : '0'..'9' ; TJ3_STRING : '"' ('a'..'z'|'A'..'Z'|'0'..'9'|' '|'_')* '"' ; ANY_TEXT : ('a'..'z'|'A'..'Z'|'0'..'9'|' '|'_')* ; TJ3_DOTTED_TASK_IDENTIFIER : TJ3_IDENTIFIER ('.' TJ3_IDENTIFIER)* ; TJ3_BOOKING_TIME : DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT ':' DIGIT DIGIT '-' TIMEZONE ; TJ3_BOOKING_START_TIME : DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT ('-' DIGIT DIGIT ':' DIGIT DIGIT)? (TIMEZONE)?; TIMEZONE : ('+'|'-')DIGIT DIGIT DIGIT DIGIT ; TJ3_DURATION : FP_VALUE ('min' | 'h' | 'd' | 'w' | 'm' | 'y') ; FP_VALUE : DIGIT+ | DIGIT* '.' DIGIT* ; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload