형식언어와 오토마타

14
LOGO 형형형형형 형형형형 형형형 형형형 4 형형 형형형 [email protected]

description

형식언어와 오토마타. 컴퓨터 공학부 4 학년 서정태 [email protected]. Contents. Subject. 1. Grammar. 2. Diagram. 3. Automata. 4. 5. Programming. S ubject. Pascal 의 식별자를 인식하는 오토마타 작성하 기 ( 인식기 ) 입력 : 식별자 처리 : 인식 가능한 식별자와 불가능한 식 별자 구분하는 오토마타 출력 : Accept OR Reject. Grammar. 식별자를 위한 문법 - PowerPoint PPT Presentation

Transcript of 형식언어와 오토마타

Page 1: 형식언어와  오토마타

LOGO

형식언어와 오토마타컴퓨터 공학부 4 학년 서정태[email protected]

Page 2: 형식언어와  오토마타

Contents

Subject1

Grammar2

Diagram3

Automata4

Programming5

Page 3: 형식언어와  오토마타

Subject

Pascal 의 식별자를 인식하는 오토마타 작성하기 ( 인식기 )

입력 : 식별자 처리 : 인식 가능한 식별자와 불가능한 식

별자 구분하는 오토마타 출력 : Accept OR Reject

Page 4: 형식언어와  오토마타

Grammar

식별자를 위한 문법

다음 문법을 기반으로 프로그램 작성

< id > -> <letter><rest><rest> -> <letter><rest>|<digit><rest>| λ<letter> -> a|b|…|z<digit> -> 0|1|…|9

Page 5: 형식언어와  오토마타

Diagram

Type 1.

일반적으로 생각해 낸 기법을 이용해서 작성한 순차적으로 검사하는 방식

JavaLanguage

Type2.

각각의 상태를 메소드로 구현해 표현한 방식으로 상태의 값을 전달 해 검사하는 방식

Page 6: 형식언어와  오토마타

Automata

Q0

Text

Satrt

Q1

Q2

letter

digit

letter

digit

identifier

fail

fail

identifier

Page 7: 형식언어와  오토마타

Type 1.

Text

public static void main(String[] args)throws IOException {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String term = "";

System.out.print(" Input Data : "); term = in.readLine();

chekVariable(term); }

Page 8: 형식언어와  오토마타

public static void chekVariable(String var){

char [] L = null; L = var.toCharArray();

if(((int)L[0] >=65 & (int)L[0] <= 90) | ((int)L[0] >=97 & (int)L[0] <=122)){

for(int i=1; i<L.length; i++){ if(((int)L[i] >=65 & (int)L[i] <= 90) | ((int)L[i] >=97 & (int)L[i] <=122) | ((int)L[i] >= 48 &(int)L[i] <=57) ){} else{ System.out.println("Reject a variable"); System.exit(0); } } System.out.println("Accect a variable"); } else{ System.out.println("Reject a variable"); }}

Page 9: 형식언어와  오토마타

Type 2.

Text

public static void main(String[] args) throws IOException{

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

String term = "";char [] arr = null;int len = 0;

System.out.print( " Input Data : ");term = in.readLine();

arr = term.toCharArray();Q0(arr, len);}

Page 10: 형식언어와  오토마타

Text

public static void Q0(char [] arr, int len){

if(arr.length == 1 | (int)arr[0] >= 48 & (int)arr[0] <= 57){ if(((int)arr[len] >= 65 & (int)arr[len] <= 90) |

((int)arr[len] >=97 & (int)arr[len] <= 122)){ Q1(arr, len); } else{ System.out.println("Reject a variable."); } } else{ if(((int)arr[len] >= 65 & (int)arr[len] <= 90) |

((int)arr[len] >=97 & (int)arr[len] <= 122)){ Q1(arr, len); } else if((int)arr[len] >= 48 & (int)arr[len] <= 57){ Q2(arr, len); } else{ System. out.println("Reject a variable."); } }}

Page 11: 형식언어와  오토마타

public static void Q1(char [] arr, int len){

if(((int)arr[len] >= 65 & (int)arr[len] <= 90) | ((int)arr[len] >=97 & (int)arr[len] <= 122)){

len ++; if(arr.length == len){ System.out.println("Accect a variable."); } else{ Q1(arr, len); } } else{ Q0(arr, len); }}

Type 2.

Page 12: 형식언어와  오토마타

public static void Q2(char [] arr, int len){

if((int)arr[len] >= 48 & (int)arr[len] <= 57){ len ++; if(arr.length == len){ System.out.println("Accect a variable."); } else{ Q2(arr, len); } } else{ Q0(arr, len); }}

Type 2.

Page 13: 형식언어와  오토마타

Result

Text

Text

Text

Text

Page 14: 형식언어와  오토마타

LOGO

컴퓨터공학부 발표자 서정태