Antlr 시리즈 - 입문 편

2841 단어 antlr
Antlr 버 전: 3.4
Antlr 다운로드 주소: http://www.antlr.org/download.html
Antlr 바이트 코드 는 lib 아래 에 있 습 니 다.
 
 
실례:
1. L. g 파일 을 만 듭 니 다. 내용 은 다음 과 같 습 니 다.
 
class SimpleParser extends Parser;

entry : (d:DOB n:NAME a:AGE(SEMI)
      { 
        System.out.println(
          "Name: "    + 
          n.getText() +
          ", Age: "   +
          a.getText() + 
          ", DOB: "   +
          d.getText()
        );
      })*
      ;

class SimpleLexer extends Lexer;

NAME : ('a'..'z'|'A'..'Z')+;

DOB  : ('0'..'9' '0'..'9' '/')=> 
       (('0'..'9')('0'..'9')'/')(('0'..'9')('0'..'9')'/')('0'..'9')('0'..'9') //{ $setType(DOB); }
     | ('0'..'9')+  { $setType(AGE); } ;

WS     :
    (' ' 
    | '\t' 
    | '\r' '
' { newline(); } | '
' { newline(); } ) { $setType(Token.SKIP); } ; SEMI : ';' ;

 이 파일 의 내용 은 문법 분석 기 를 통 해 분 석 된 후 (Lexer) 자바 파일 을 생 성 합 니 다.
구체 적 인 명령:
 
java -cp /home/xfc/antlr/antlr3.4/lib/antlr-3.4-complete.jar antlr.Tool L.g

 2. 종료 후 자바 파일 3 개 생 성:
LLexer.java
LParser.java
LParserTokenTypes.java
3. test 테스트 를 작성 합 니 다:
 
import java.io.*;
public class Main {
    public static void main(String args[]) {
        FileInputStream f = null;
        try {
            f = new FileInputStream("/home/xfc/antlr/s_antlr/src/test.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        DataInputStream input = new DataInputStream(f);
        LLexer lexer = new LLexer(input);
        LParser parser = new LParser(lexer);
        try {
            parser.entry();
        } catch(Exception e) {}
    }
}
 
4. 특정 디 렉 터 리 의 test. txt 를 새로 만 듭 니 다.
 
06/06/82 Peter 20;
03/04/83 Rosie 19;
04/05/81 Mikey 21;

 5. 실행 후 결과:
 
 쓰다
Name: Peter, Age: 20, DOB: 06/06/82
Name: Rosie, Age: 19, DOB: 03/04/83
Name: Mikey, Age: 21, DOB: 04/05/81
 
 
참고 자료: http://zbw.iteye.com/blog/25860

좋은 웹페이지 즐겨찾기