[antlr-interest] Simple Grammar Question
John Gardener
John.Gardener at carrotgarden.com
Fri Jan 16 19:08:49 PST 2009
*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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090116/4baab266/attachment.html
More information about the antlr-interest
mailing list