20 Eylül 2017 Çarşamba

antlr

Gramer
Örnek
Şöyle yaparız.
grammar Demo;

program: command
         IDENTIFIER
         ;

command:
         'add'
       | 'remove'
       ;

IDENTIFIER: [a-zA-Z][a-zA-Z0-9]* ;

WHITESPACE: [ \t\n\r]+ -> skip;
Kod Üretimi
Gramerden Lexer (MyLexer.java), Parser (MyParser.java) ve Listener (MyBaseListener.java, MyListener.java, ) kodlaru üretilir..

Lexer Sınıfı
constructor
Şöyle yaparız.
String str = ...;
// Get our lexer
MyLexer lexer = new MyLexer(new ANTLRInputStream(str));
Parser Sınıfı
constructor
Şöyle yaparız.
// Get a list of matched tokens
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Pass the tokens to the parser
MyParser parser = new MyParser(tokens);
compilationUnit metodu
Şöyle yaparız.
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.tree.CommonTree;
import org.antlr.runtime.tree.DOTTreeGenerator;
import org.antlr.stringtemplate.StringTemplate;

parseFile("/home/Test.java");


public static void parseFile(String f)throws Exception {

  JavaLexer lexer = new JavaLexer(new ANTLRFileStream(f));
  CommonTokenStream tokens = new CommonTokenStream(lexer);
  JavaParser parser = new JavaParser(tokens);
  CommonTree tree = (CommonTree)parser.compilationUnit().getTree();
  DOTTreeGenerator gen = new DOTTreeGenerator();
  StringTemplate st = gen.toDOT(tree);
  System.out.println(st);

}

translationUnit metodu
Şöyle yaparız.
ParseTree entryPoint = parser.translationunit();
ParseTreeWalker Sınıfı
walk metodu
Şöyle yaparız.
/ Walk it and attach our listener
ParseTreeWalker walker = new ParseTreeWalker();
// Specify our entry point
ParseTree entryPoint = parser.translationunit();
walker.walk(new MyBaseListener(), entryPoint);

Hiç yorum yok:

Yorum Gönder