형식언어와 오토마타
description
Transcript of 형식언어와 오토마타
LOGO
형식언어와 오토마타컴퓨터 공학부 4 학년 서정태[email protected]
Contents
Subject1
Grammar2
Diagram3
Automata4
Programming5
Subject
Pascal 의 식별자를 인식하는 오토마타 작성하기 ( 인식기 )
입력 : 식별자 처리 : 인식 가능한 식별자와 불가능한 식
별자 구분하는 오토마타 출력 : Accept OR Reject
Grammar
식별자를 위한 문법
다음 문법을 기반으로 프로그램 작성
< id > -> <letter><rest><rest> -> <letter><rest>|<digit><rest>| λ<letter> -> a|b|…|z<digit> -> 0|1|…|9
Diagram
Type 1.
일반적으로 생각해 낸 기법을 이용해서 작성한 순차적으로 검사하는 방식
JavaLanguage
Type2.
각각의 상태를 메소드로 구현해 표현한 방식으로 상태의 값을 전달 해 검사하는 방식
Automata
Q0
Text
Satrt
Q1
Q2
letter
digit
letter
digit
identifier
fail
fail
identifier
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); }
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"); }}
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);}
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."); } }}
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.
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.
Result
Text
Text
Text
Text
LOGO
컴퓨터공학부 발표자 서정태