JavaCC<br />강효원<br />
Compiler Compiler is…<br />Compiler 를 생성하는 Compiler<br />일반적으로 Lexer와 Parser를 생성하는 Tool<br />Parsing 방식에 따라서 LL, LR, Recur...
용어 정리 약간…<br />Token : 문법의 가장 기본적인 요소. <br />Lexing, Lexer : Token 을만드는 일, 만드는 Tool <br />Parser : 문법(Syntax, 구문) 분석 Tool<...
CFG? BNF? EBNF<br />자세히 하면 머리 아프니까……<br />CFG<br />문법 표현의 한 형식 …….이라고만 알아두세요… ( 터미널, 논터미널.. 그리고 ..길어지니…)                  ...
LL? LR<br />LL<br />Left to Right parsing<br />Leftmost Derivation<br />Left Recursion avoid.<br />Left Factoring<br /><ul...
Left to Right parsing
Rightmost Derivation</li></li></ul><li>JavaCC is…<br />Java 언어 기반의 Compiler Compiler프로그램(Java Compiler Compiler)<br />LL 방...
설치<br />Download and 압축 풀기<br />And Path 설정<br />Path :: Javacc폴더+ in 폴더를 기존 path 값에 추가. <br />
Start in Eclipse<br />Plug in 도 존재 ( 현재 4.0 버전까지 확인)<br />Ant 를 통해서 실행 가능<br />
jjt파일의 형태<br />Option 선언부<br />Parser 선언부<br />Lexing규칙<br />Parser 규칙 (production ..)<br />
일단 계산기부터?<br />간단하게 2항 +,- 연산을 수행하는 계산기를 작성해보자..<br />입력은 일단 정수로 한정.<br />+ 와 – 의 2항 연산으로 한정해서 일단 구성.<br />
Test부터.. 작성<br />Calculator Class 는…<br />
문법을 작성해보자..<br />Option 선언부는 일단 건너가고…<br /><ul><li>Parser 선언부의 아래 3곳의 이름은 같아야 한다.
그 외의 내부적으로 필요한 처리가 들어가나 일단 패스.</li></li></ul><li>Token 선언<br />< TOKENNAME :  정규표현 ><br />“|” 는 선택 을 의미<br />+ 는 1회 이상 반복<...
Grammar<br />
문법에 직접 계산 코드를 넣어 보자.<br />
Build<br />
주의사항<br />jjTree의 버그 인지는 모르나. 아무런 Node 선언 없이 jjTree를 수행하면 컴파일 에러가 발생한다 ( java compile)<br />Node 인터페이스 와 SimpleNode클래스가 생성...
TestCase실행<br />
추가 수정<br />*,/ 추가<br />다항 연산이 되도록 하려면?<br /> 연산의 우선 순위 문제<br />** 일반적인 규칙 : 더 높은 우선 순위의 문법을 낮은 우선 순의 문법의 구성 요소로 만든다.<br />
수정된 문법<br />
코드 추가하기<br />
코드 추가하기 – con’t<br />
하나 더…. () 를 사용하려면?<br />** HINT :: 앞에서 integer를 왜 쓸데 없이 element 로 뺐을까??<br />간단한 토큰은 이렇게 도 추가 가능<br />문법만 보기<br />
기타 주의점<br />Token 이 여러가지로 해석 될 때 의 결정 규칙<br />먼저 기술 된 것 우선<br />가장 길게 Matching 되는 것 우선<br />이 문법을 이리저리 테스트 해보세요<br />
Upcoming SlideShare
Loading in...5
×

Java cc introduce

2,190

Published on

아꿈사 스터디, 발표자료 JavaCC 간단한 소개

Published in: Travel
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,190
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

Java cc introduce

  1. 1. JavaCC<br />강효원<br />
  2. 2.
  3. 3. Compiler Compiler is…<br />Compiler 를 생성하는 Compiler<br />일반적으로 Lexer와 Parser를 생성하는 Tool<br />Parsing 방식에 따라서 LL, LR, Recursive Decendent Parser 등으로 나뉨.<br />대표적 :: Lex/Yacc, JavaCC, AntLR …<br />
  4. 4. 용어 정리 약간…<br />Token : 문법의 가장 기본적인 요소. <br />Lexing, Lexer : Token 을만드는 일, 만드는 Tool <br />Parser : 문법(Syntax, 구문) 분석 Tool<br />Semantic Analysis : 의미 해석, 번역, <br />CFG(Context Free Grammar) <br />EBNF(Extended Backus Normal Form)<br />LL, LR : PARSING 방식의 종류 (알고 싶으신가요..) <br />Confilct : LL 과 LR에서 약간 다르나, 단단히 정의 하면 특정 Status 에서 어떤 문법으로 해석할지 알 수 없는 경우.<br />JJTree : JavaCC + Tree 생성 문법.<br />LOOKAHEAD : 문법의 결정시 TOKEN 몇 개를 미리 보는 것을 의미 ( LL(K),LR(K) )<br />
  5. 5. CFG? BNF? EBNF<br />자세히 하면 머리 아프니까……<br />CFG<br />문법 표현의 한 형식 …….이라고만 알아두세요… ( 터미널, 논터미널.. 그리고 ..길어지니…) <br />BNF :: CFG의 표기법, 문장의 구성 요소의 나열과 “|”을 사용한 구성 요소의 선택<br /><signed integer> ::= +<integer> | -<integer><br /><integer> ::= <digit> | <integer> <digit><br /><digit> ::= 0|1|2|3|4|5|6|7|8|9<br />EBNF :: BNF 에 [] 를 통한 생략 가능과{} 을 도입하여 * 나 + 를 통한 반복을 표시<br /><signed integer> ::= [+|-]<digit>{<digit>}*<br />
  6. 6. LL? LR<br />LL<br />Left to Right parsing<br />Leftmost Derivation<br />Left Recursion avoid.<br />Left Factoring<br /><ul><li>LR
  7. 7. Left to Right parsing
  8. 8. Rightmost Derivation</li></li></ul><li>JavaCC is…<br />Java 언어 기반의 Compiler Compiler프로그램(Java Compiler Compiler)<br />LL 방식의 분석 기법 사용.<br />일단 Parser 가 Generation 되고 나면 추가 Library 가 필요 없음.<br />EBNF 형태의 문법 기술.<br />
  9. 9. 설치<br />Download and 압축 풀기<br />And Path 설정<br />Path :: Javacc폴더+ in 폴더를 기존 path 값에 추가. <br />
  10. 10. Start in Eclipse<br />Plug in 도 존재 ( 현재 4.0 버전까지 확인)<br />Ant 를 통해서 실행 가능<br />
  11. 11. jjt파일의 형태<br />Option 선언부<br />Parser 선언부<br />Lexing규칙<br />Parser 규칙 (production ..)<br />
  12. 12. 일단 계산기부터?<br />간단하게 2항 +,- 연산을 수행하는 계산기를 작성해보자..<br />입력은 일단 정수로 한정.<br />+ 와 – 의 2항 연산으로 한정해서 일단 구성.<br />
  13. 13. Test부터.. 작성<br />Calculator Class 는…<br />
  14. 14. 문법을 작성해보자..<br />Option 선언부는 일단 건너가고…<br /><ul><li>Parser 선언부의 아래 3곳의 이름은 같아야 한다.
  15. 15. 그 외의 내부적으로 필요한 처리가 들어가나 일단 패스.</li></li></ul><li>Token 선언<br />< TOKENNAME : 정규표현 ><br />“|” 는 선택 을 의미<br />+ 는 1회 이상 반복<br />*는 0 회 이상 반복<br />?는 앞선 요소가 선택적입을 의미 <br />[] 는 내부 구성 요소들 중 하나<br />[] 내부의 “CHAR” ~ “CHAR2” 는 범위 표현<br />~는 무엇무엇을 제외하고 <br />ex) ~[“$”] $를 제외한 하나의 문자.<br />
  16. 16. Grammar<br />
  17. 17. 문법에 직접 계산 코드를 넣어 보자.<br />
  18. 18. Build<br />
  19. 19. 주의사항<br />jjTree의 버그 인지는 모르나. 아무런 Node 선언 없이 jjTree를 수행하면 컴파일 에러가 발생한다 ( java compile)<br />Node 인터페이스 와 SimpleNode클래스가 생성되지 않아서임<br />Option 부의 NODE_DEFAULT_VOID를 우선 FALSE로 한 빈 문법을 BUILD 하거나<br />최상위 문법만 우선 임시적으로 Node선언을 한 후 build 하면 된다. <br />OR<br />
  20. 20. TestCase실행<br />
  21. 21. 추가 수정<br />*,/ 추가<br />다항 연산이 되도록 하려면?<br /> 연산의 우선 순위 문제<br />** 일반적인 규칙 : 더 높은 우선 순위의 문법을 낮은 우선 순의 문법의 구성 요소로 만든다.<br />
  22. 22. 수정된 문법<br />
  23. 23. 코드 추가하기<br />
  24. 24. 코드 추가하기 – con’t<br />
  25. 25. 하나 더…. () 를 사용하려면?<br />** HINT :: 앞에서 integer를 왜 쓸데 없이 element 로 뺐을까??<br />간단한 토큰은 이렇게 도 추가 가능<br />문법만 보기<br />
  26. 26. 기타 주의점<br />Token 이 여러가지로 해석 될 때 의 결정 규칙<br />먼저 기술 된 것 우선<br />가장 길게 Matching 되는 것 우선<br />이 문법을 이리저리 테스트 해보세요<br />
  27. 27. 감사합니다.<br />참조<br />JAVACC 공식 사이트 :: https://javacc.dev.java.net/<br />한글 설명 PDF : http://50001.com/sub/down/javaCC.pdf<br />책 :<br />

×