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);

19 Eylül 2017 Salı

JUL ConsoleHandler Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.logging.ConsoleHandler;
Açıklaması şöyle. Yani ConsoleHandler bazı logları System.err akımına gönderir. CONFIG, FINE, FINER, FINEST gibi seviyeleri loglamaz.
By default, the logger outputs log records of level INFO and above (i.e., INFO, WARNING and SEVERE) to standard error stream (System.err).
Örnek
Konsolda çıktı görmek için şöyle yaparız
import java.util.logging.Logger

public class Example {

  private final static Logger LOGGER = Logger.getLogger(Example.class.getName());

  public static void main(String[] args) {
    LOGGER.info("Test");
  }
}
Örnek
Şöyle yaparız. Burada setUseParentHandlers(false) yapılıyor yoksa,iki tane ConsolHandler olduğu için mesajları çift görürüz.
import java.util.logging.*;

public class ExampleLogger {
private static final Logger LOGGER = Logger.getLogger(ExampleLogger.class.getName());

  public static void main(String[] args) {
    // create a new console handler
    ConsoleHandler consoleHandler = new ConsoleHandler();
    // set the handler's log level to FINEST
    consoleHandler.setLevel(Level.FINEST);
    // add the handler to the logger
    LOGGER.addHandler(consoleHandler);
    LOGGER.setUseParentHandlers(false);
    LOGGER.info("Starting application...");

    try {
      int result = 10 / 0;
    } catch (ArithmeticException e) {
      LOGGER.log(Level.SEVERE, "An error occurred", e);
    }
    LOGGER.info("Application finished.");
  }
}
Açıklaması şöyle
By default, ConsoleHandler logs messages with a severity level of Level.INFO and higher to the console. However, by setting the log level to Level.FINEST, we can see all log messages, including those with lower severity levels.
Bir diğer yolu da şöyle
// Option 1: Remove the default ConsoleHandler :
Logger rootLogger = Logger.getLogger("");
Handler[] handlers = rootLogger.getHandlers();
for (Handler handler : handlers) {
  if (handler instanceof ConsoleHandler) {
    rootLogger.removeHandler(handler);
  }
}

// Option 2: call LOGGER.setUseParentHandlers(false);
LOGGER.setUseParentHandlers(false);