[antlr-interest] Simple Grammar Question
Gerald Rosenberg
gerald at certiv.net
Fri Jan 16 20:31:10 PST 2009
Your NAME rule is consuming all tokens.
The record rule fails to find a digit, recovers and finds a name,
succeeds yet reports the exception.
At 07:08 PM 1/16/2009, John Gardener wrote:
>Hello;
>
>I am stuck with simple grammar; any help is much welcomed;
>
>I want to parse 2 term sentenses, such as:
><1: single digit > <2: name containing letters and digits > EOF
>
>Below comes:
>1) grammar
>2) test rig
>3) output
>
>PROBLEM:
>Second term (name) seems to greedily consume whole input;
>
>Please let me know what is the proper way to deal with this?
>
>1) GRAMMAR
>
>grammar Simple;
>
>options {
> language = Java;
>}
>
>@parser::header {
> package simple;
> import static java.lang.System.out;
>}
>
>@lexer::header{
> package simple;
> import static java.lang.System.out;
>}
>
>// PARSER
>
>record :
> digit name EOF
> { out.println( "+record: " + $text ); };
>
>digit : DIGIT
> { out.println( "+digit: " + $text ); };
>
>name : NAME
> { out.println( "+name: " + $text ); };
>
>
>// LEXER
>
>DIGIT : '0'..'9'
> { out.println("+DIGIT: " + $text ); } ;
>
>LETTER : 'A'..'Z'
> { out.println("+LETTER: " + $text ); } ;
>
>NAME : ( LETTER | DIGIT ) +
> { out.println("+NAME: " + $text ); } ;
>
>
>2) TEST RIG
>
>package simple;
>
>import java.io.ByteArrayInputStream;
>
>import org.antlr.runtime.ANTLRInputStream;
>import org.antlr.runtime.CommonTokenStream;
>
>import static java.lang.System.out;
>
>public class SimpleTest {
>
> public static void main(String[] args) throws Exception {
>
> String record = "3B5A";
>
> ByteArrayInputStream stream = new ByteArrayInputStream(record
> .getBytes());
>
> ANTLRInputStream input = new ANTLRInputStream(stream);
>
> SimpleLexer lexer = new SimpleLexer(input);
>
> CommonTokenStream tokens = new CommonTokenStream(lexer);
>
> SimpleParser parser = new SimpleParser(tokens);
>
> parser.record();
>
> out.println(record);
>
> }
>
>}
>
>
>3) TEST OUTPUT
>
>+DIGIT: 3
>+LETTER: 3B
>+DIGIT: 3B5
>+LETTER: 3B5A
>+NAME: 3B5A
>line 1:0 missing DIGIT at '3B5A'
>+digit: null
>+name: 3B5A
>+record: 3B5A
>3B5A
>
>
>Thank you,
>
>John
>
>
>List: http://www.antlr.org/mailman/listinfo/antlr-interest
>Unsubscribe:
>http://www.antlr.org/mailman/options/antlr-interest/your-email-address
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090116/09e0e456/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Simple.png
Type: application/octet-stream
Size: 23142 bytes
Desc: not available
Url : http://www.antlr.org/pipermail/antlr-interest/attachments/20090116/09e0e456/attachment.obj
More information about the antlr-interest
mailing list