SlideShare una empresa de Scribd logo
1 de 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 되는 것 우선 이 문법을 이리저리 테스트 해보세요

Más contenido relacionado

La actualidad más candente

La actualidad más candente (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 a Java cc introduce

Similar a 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 책 :