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

More Related Content

What's hot

Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)NAVER D2
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
[ES6] 3. iteration
[ES6] 3. iteration[ES6] 3. iteration
[ES6] 3. iterationHan JaeYeab
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이fromitive
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션cpt mobilex
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-InterpreterJuhwan Yun
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4Jinkyoung Kim
 
20110212 taocp 1.4.3
20110212 taocp 1.4.320110212 taocp 1.4.3
20110212 taocp 1.4.3Seongahn Kim
 

What's hot (10)

Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)[Kerference]  DEFCON CTF 풀어보기 - 박상석(KERT)
[Kerference] DEFCON CTF 풀어보기 - 박상석(KERT)
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
[ES6] 3. iteration
[ES6] 3. iteration[ES6] 3. iteration
[ES6] 3. iteration
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이
 
1 Python기초 오리엔테이션
1 Python기초 오리엔테이션1 Python기초 오리엔테이션
1 Python기초 오리엔테이션
 
Iterator pattern
Iterator patternIterator pattern
Iterator pattern
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4
 
20110212 taocp 1.4.3
20110212 taocp 1.4.320110212 taocp 1.4.3
20110212 taocp 1.4.3
 

Similar to Java cc introduce

Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpretereva
 
200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료Joohyun Han
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1Jinkyoung Kim
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터Hoyoung Jung
 
Keras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptxKeras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptx영빈 이
 
Keras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptxKeras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptx영빈 이
 

Similar to Java cc introduce (8)

Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
 
200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
Keras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptxKeras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptx
 
Keras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptxKeras-community-week_Flax_and_Keras.pptx
Keras-community-week_Flax_and_Keras.pptx
 

Java cc introduce

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