algol60을C언어로변환하는프로그램작성
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

algol60을C언어로변환하는프로그램작성에 대한 보고서 자료입니다.

목차

1. 숙제 설명

2. 프로그램 설명

3. 소스파일

본문내용

ng[4]!=1){//for문 다음에 while문이 나온것이 아니라면
k=1;//앞에서 ; 변수 <= ; 변수 += 를 넣어준 곳에
while(v[i-k]!="until")k++;//알골60 토큰이 저장된 벡터 v를 검사하여
l=k;//until과 step가 나온 곳을 찾는다.
while(v[i-k]!="step")k++;
sk=1;//+= 뒤에는 step 다음에 나온 토큰을 넣어주면 된다.
while(sv[sv.size()-sk]!=";")sk++;
while(v[i-l+1]!="do")
sv.insert(sv.begin()+sv.size()-sk,v[i-(l--)+1]);
while(v[i-k+1]!="until")
sv.push_back(v[i-(k--)+1]);
}
else
state_checking[4]=0;
sv.push_back(")");//마지막으로 ) 를 넣어준다.
}
}
else if(v[i]=="procedure"){//함수문이 나오면
state_checking[3]=1;//함수 변환중임을 알리는 변수를 1로 변환하고
state_checking[5]=1;//함수가 나오고 begin이 아직 안나왔음을 알리는 변수 를 1로 변환한다.
pn.erase();
pn += v[i+1];//pn에 procedure name 저장
if(v[i-1]!="integer"&&v[i-1]!="boolean"&&v[i-1]!="real")
sv.push_back("void");//만약 procedure 앞 토큰이 타입을 나타내는 것이 아니면 void를 넣어준다.
}
else if(v[i]=="while"){
if(state_checking[0]==1){//for문이라면
state_checking[4]=1;//for문 다음에 while문이 나타남을 알리는 변수를 1로 변경한다.
k=1;
sv.push_back(";");//for문 중간 조건이 없는 형이므로 연속으로 ;;를 넣어준다.
sv.push_back(";");
}
}
else if(v[i]=="own"){sv.push_back("static");}//간단한 토큰 일대일 변환
else if(v[i]=="boolean"){sv.push_back("BOOL");}
else if(v[i]=="integer"){sv.push_back("int");}
else if(v[i]=="real"){sv.push_back("double");}
else if(v[i]=="less"){sv.push_back("<");}
else if(v[i]=="notgreater"){sv.push_back("<=");}
else if(v[i]=="equal"){sv.push_back("==");}
else if(v[i]=="notless"){sv.push_back(">=");}
else if(v[i]=="greater"){sv.push_back(">");}
else if(v[i]=="notequal"){sv.push_back("!=");}
else if(v[i]=="not"){sv.push_back("!=");}
else if(v[i]=="and"){sv.push_back("&&");}
else if(v[i]=="or"){sv.push_back("||");}
else if(v[i]=="true"){sv.push_back("TRUE");}
else if(v[i]=="false"){sv.push_back("FALSE");}
else if(v[i]=="array"){//array는 일반적으로 변환 생략하나
if(state_checking[3]==1&&state_checking[5]==1)//함수가 선언되고 begin이 아직 안나온 상황이라면
sv.push_back("array");//파라미터 타입에 array가 있다는 소리이므로
}//그대로 써준다.
else if(v[i]=="string"){}
else if(v[i]=="value"){}
else if(v[i]=="["){//배열이 나오면
k=1; l=0;
while(v[i+(k++)]!="]")//[와 ] 사이를 검사하여 : 이 있는지 확인하고 있으면
if(v[i+k]==":")
state_checking[2]=1;//state_checking[2]를 1로 바꾸어 있다고 알린다.
if(state_checking[2]==1)
i=i+k-2;//[] 사이를 변환하지 않고 바로 ]로 가도록 한다.
sv.push_back("[");
}
else if(v[i]=="]"){// ]이면 state_checking[2]가 1이면 [ ] 사이에 :이 있다는 뜻이므로
if(state_checking[2]==1){
state_checking[2]=0;
k=1;
while(v[i-k]!=":") k++;//:와 ]사이의 부분에 + 1을 써주고
while(k!=1)
sv.push_back(v[i-(k--)+1]);
sv.push_back("+");
sv.push_back("1");
}
sv.push_back("]");//]로 닫는다.
}
else if(v[i]==":="){
if(state_checking[3]==1){//함수 변환 중에 :=에 나오면 앞뒤를 확인한다.
if(v[i-1]==pn&&v[i+1]!="if"){//뒤에 if문이 나오면 if문 변환시 알아서 할것이다.
sv.pop_back();//하지만 if문이 안나오는데 함수이름과 할당이 나오면
sv.push_back("return");//바로 리턴하는 경우이므로 return을 추가시킨다.
}
sv.push_back("=");
}
else
sv.push_back("=");
}
else if(v[i]=="<="){sv.push_back("<=");}//간단한 연산 일대일 변환
else if(v[i]=="<>"){sv.push_back("!=");}
else if(v[i]==">="){sv.push_back(">=");}
else if(v[i]=="="){sv.push_back("==");}
else if(v[i]==";"){if(v[i-1]!="end")sv.push_back(";");}
else{
sv.push_back(v[i]);
}
return i;
}

키워드

algol60,   알골60,   C언어,   변환,   프로그램,   소스,   translater
  • 가격1,500
  • 페이지수13페이지
  • 등록일2006.09.27
  • 저작시기2006.4
  • 파일형식한글(hwp)
  • 자료번호#349455
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니