Sisendfailis on igal real kas täisarvudega opereeriv aritmeetiline avaldis või sellise avaldise omistamine muutujale (väärtustatud muutujat võib järgnevates avaldistes juba kasutada. Sellise sisendi süntaksi võib kirjeldada näiteks grammatikaga:
avald yksl | avald + yksl
| avald - yksl yksl tegur | yksl * tegur | RV tegur ARV |ID ARV ('0'..'9')+ ID ('a'..'z'|'A'..'Z')+ RV ('\r''\n'|'\n'|'\t')
Antlr3 jaoks tuleb see sisendit kirjeldav grammatika (koos Javas kirjeldatud semantilise tegevusega, mis väljastab süntakstiliselt korrektse avaldise puhul avaldise teksti ja selle järel - OK) esitada kujul:
grammar avald; tokens { PLUS = '+' ; MINUS = '-' ; MULT = '*' ; DIV = '/' ; } @members { /* peaprogramm ! */ public static void main(String[] args) throws Exception { /*avaldLexer lex = new avaldLexer(new ANTLRFileStream(args[0]));*/ ANTLRInputStream input = new ANTLRInputStream(System.in); avaldLexer lex = new avaldLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); avaldParser parser = new avaldParser(tokens); try { parser.avald(); } catch (RecognitionException e) { e.printStackTrace(); } } } /*------------------------------------------------------------------ * PARSER RULES *------------------------------------------------------------------*/ avald : yksl ( ( PLUS | MINUS ) yksl)* {System.out.println($avald.text + " - OK");} ; yksl : tegur ( ( MULT | DIV ) tegur )* ; tegur : ARV ; /*------------------------------------------------------------------ * LEXER RULES *------------------------------------------------------------------*/ ARV : NUM('.'NUM)? ; WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ; fragment NUM : ('0'..'9')+ ;
Grammatikafail algab grammatika nimega grammar avald ja see nimi peab kokku langema faili nimega, milles grammatika salvestatakse, see ga see grammatika tuleb salvestada failis avald.g ((.g - grammar - Antlr-i tavalaiend). Kui see fail avada silumiseks programmis ANTLRWorks, saab kontrollida kogu grammatika korrektsust ("Grammar - Check Grammar"), vaadelda produktsioonide vooskeeme.
Võib käivitada ka grammatika interpretaatori ja kui interpretaatorile anda mingi sisend, siis saab vaadelda sisendi analüüsiks konstrueeritud derivatsioonipuud ja selle debuggeris samm-sammult läbida.
javac *.javaLoome ka testfaili, kus on näiteks selline avadis:
2+3*4Käivitame loodud süntaksikontrolleri, andes talle sisendiks selle faili (see peab UltraEdit-is olema aktiivses aknas):
java avaldParser < %fTulemuseks saame
2+3*4 - OK
public static int i; static double rarv = 3.1415; public boolean result = true; private char capitalC = 'C';