Your SlideShare is downloading. ×
0
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Java cc introduce
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java cc introduce

2,139

Published on

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

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

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

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. JavaCC<br />강효원<br />
  • 2.
  • 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. 용어 정리 약간…<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. 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. LL? LR<br />LL<br />Left to Right parsing<br />Leftmost Derivation<br />Left Recursion avoid.<br />Left Factoring<br /><ul><li>LR
  • 7. Left to Right parsing
  • 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. 설치<br />Download and 압축 풀기<br />And Path 설정<br />Path :: Javacc폴더+ in 폴더를 기존 path 값에 추가. <br />
  • 10. Start in Eclipse<br />Plug in 도 존재 ( 현재 4.0 버전까지 확인)<br />Ant 를 통해서 실행 가능<br />
  • 11. jjt파일의 형태<br />Option 선언부<br />Parser 선언부<br />Lexing규칙<br />Parser 규칙 (production ..)<br />
  • 12. 일단 계산기부터?<br />간단하게 2항 +,- 연산을 수행하는 계산기를 작성해보자..<br />입력은 일단 정수로 한정.<br />+ 와 – 의 2항 연산으로 한정해서 일단 구성.<br />
  • 13. Test부터.. 작성<br />Calculator Class 는…<br />
  • 14. 문법을 작성해보자..<br />Option 선언부는 일단 건너가고…<br /><ul><li>Parser 선언부의 아래 3곳의 이름은 같아야 한다.
  • 15. 그 외의 내부적으로 필요한 처리가 들어가나 일단 패스.</li></li></ul><li>Token 선언<br />< TOKENNAME : 정규표현 ><br />“|” 는 선택 을 의미<br />+ 는 1회 이상 반복<br />*는 0 회 이상 반복<br />?는 앞선 요소가 선택적입을 의미 <br />[] 는 내부 구성 요소들 중 하나<br />[] 내부의 “CHAR” ~ “CHAR2” 는 범위 표현<br />~는 무엇무엇을 제외하고 <br />ex) ~[“$”] $를 제외한 하나의 문자.<br />
  • 16. Grammar<br />
  • 17. 문법에 직접 계산 코드를 넣어 보자.<br />
  • 18. Build<br />
  • 19. 주의사항<br />jjTree의 버그 인지는 모르나. 아무런 Node 선언 없이 jjTree를 수행하면 컴파일 에러가 발생한다 ( java compile)<br />Node 인터페이스 와 SimpleNode클래스가 생성되지 않아서임<br />Option 부의 NODE_DEFAULT_VOID를 우선 FALSE로 한 빈 문법을 BUILD 하거나<br />최상위 문법만 우선 임시적으로 Node선언을 한 후 build 하면 된다. <br />OR<br />
  • 20. TestCase실행<br />
  • 21. 추가 수정<br />*,/ 추가<br />다항 연산이 되도록 하려면?<br /> 연산의 우선 순위 문제<br />** 일반적인 규칙 : 더 높은 우선 순위의 문법을 낮은 우선 순의 문법의 구성 요소로 만든다.<br />
  • 22. 수정된 문법<br />
  • 23. 코드 추가하기<br />
  • 24. 코드 추가하기 – con’t<br />
  • 25. 하나 더…. () 를 사용하려면?<br />** HINT :: 앞에서 integer를 왜 쓸데 없이 element 로 뺐을까??<br />간단한 토큰은 이렇게 도 추가 가능<br />문법만 보기<br />
  • 26. 기타 주의점<br />Token 이 여러가지로 해석 될 때 의 결정 규칙<br />먼저 기술 된 것 우선<br />가장 길게 Matching 되는 것 우선<br />이 문법을 이리저리 테스트 해보세요<br />
  • 27. 감사합니다.<br />참조<br />JAVACC 공식 사이트 :: https://javacc.dev.java.net/<br />한글 설명 PDF : http://50001.com/sub/down/javaCC.pdf<br />책 :<br />

×