|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년10월28일 12:55 주제: 2번 parser 입니다 |
|
|
http://mimosa.snucse.org/~compwhiz/run.exe
http://mimosa.snucse.org/~compwhiz/test.code
첫번째가 실행파일이고 두번째가 syntax 예시 코드입니다.
리눅스 머신에 적당히 집어넣고 ./run.exe test.code 와 같이 실행하면 됩니다.
제시한 예시 코드의 경우
Seq [Assign("a",Const 1);Assign("b",Const 2);Print [Binop(Var "a",Plus,Var "b")];Print [Var "a";Var "b"];Assign("c",Const 3);Assign("a",Binop(Binop(Var "a",Plus,Var "b"),Plus,Var "c"));Assign("d",Const 0);Print [If(Var "d",Var "a",Var "b")];Print [If(Var "a",Var "a",Var "b")];Print [Var "a";Var "b";Var "c"];Assign("a",Binop(Var "a",Plus,Binop(Var "b",Times,Var "c")));Print [Var "a"];Assign("d",If(Var "d",Var "a",Var "b"));Print [Var "d"]]
result :
3
1,2
2
6
6,2,3
12
2
이런 출력이 나옵니다.
result : 윗 부분 인터프리터 환경에다가 그대로 복붙 입력하시면 stm 타입의 값을 만들어낼 수 있고
(예를 들면 인터프리터에 직접 짠 코드를 얹은 후
intp (복붙, []) 을 하면 결과를 얻을 수 있습니다)
아랫 부분은 실행 결과입니다.
인터프리터를 거치지 않고 바로 code를 넣으면
각자 작성한 코드 위에서 실행결과를 출력할 수 있도록 만들수도 있긴 한데
그렇게 하려면 간단한 스켈레톤 코드를 올려야 하기 때문에..
조교님이 허락하신다면 올릴 수도 있구요.
module 정의만 들어있는 코드로..
////////////////////////////////
토큰과 문법 정의입니다.
토큰 -
INT : [0-9]+ | "~"[0-9]+
ID : [a-zA-Z]([a-zA-Z\'0-9_])*
나머지는 연산자와 예약어 그대로.
( LPAREN
) RPAREN
; SEMI
+ PLUS
- MINUS
* TIMES
/ DIV
:= ASSIGN
문법 -
program -> stm EOF
stm ->
ID ASSIGN exp
| PRINT expseq
| LPAREN stmseq RPAREN
stmseq ->
stm
| stm SEMI stmseq
exp ->
ID
| num
| exp PLUS exp
| exp MINUS exp
| exp TIMES exp
| exp DIV exp
| IF exp THEN exp ELSE exp
| LPAREN exp RPAREN
expseq ->
exp
| exp COMMA expseq
우선순위 -
TIMES, DIV > PLUS, MINUS > IF THEN ELSE > COMMA > ASSIGN > SEMI
PLUS, MINUS, TIMES, DIV는 왼쪽 우선.
COMMA, SEMI는 오른쪽 우선. _________________ TA |
|
위로 |
|
|
신희제
가입: 2009년 10월 28일 올린 글: 11
|
올려짐: 2009년10월28일 15:51 주제: |
|
|
메일로 파서 코드를 보내주시면 검토후에 올리도록 하겠습니다. |
|
위로 |
|
|
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년10월28일 21:07 주제: re |
|
|
swjang at ropas.snu.ac.kr
으로 구현해야할 코드 부분을 지워서 보냈습니다. _________________ TA |
|
위로 |
|
|
신희제
가입: 2009년 10월 28일 올린 글: 11
|
|
위로 |
|
|
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년10월29일 18:40 주제: re |
|
|
요청이 거부됨!!!!!!!
권한설정에 문제가 있는 모양입니다. _________________ TA |
|
위로 |
|
|
신희제
가입: 2009년 10월 28일 올린 글: 11
|
올려짐: 2009년10월29일 19:18 주제: |
|
|
수정하였습니다. |
|
위로 |
|
|
김학봉
가입: 2008년 9월 5일 올린 글: 70
|
|
위로 |
|
|
신기정
가입: 2009년 9월 15일 올린 글: 83
|
올려짐: 2009년10월31일 8:21 주제: 저...죠교님이나.. 윤용호님 |
|
|
이게 뭐하는거고 왜필요한건지좀 설명해주시면 안될까요?
뭐가 뭔지 잘 모르겠어서요 ㅜㅜ |
|
위로 |
|
|
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2009년10월31일 11:57 주제: Re: 저...죠교님이나.. 윤용호님 |
|
|
신기정 씀: | 이게 뭐하는거고 왜필요한건지좀 설명해주시면 안될까요?
뭐가 뭔지 잘 모르겠어서요 ㅜㅜ |
필수적인건 아니고 테스트 해보는데 많은 도움이 되는 프로그램입니다.
(a:=1;b:=2;print (a+b);print a,b;c:=3;a:=a+b+c;d:=0;print if d then a else b;print if a then a else b;print a,b,c;a:=a+b*c;print a;d:=if d then a else b;print d)
Seq [Assign("a",Const 1);Assign("b",Const 2);Print [Binop(Var "a",Plus,Var "b")];Print [Var "a";Var "b"];Assign("c",Const 3);Assign("a",Binop(Binop(Var "a",Plus,Var "b"),Plus,Var "c"));Assign("d",Const 0);Print [If(Var "d",Var "a",Var "b")];Print [If(Var "a",Var "a",Var "b")];Print [Var "a";Var "b";Var "c"];Assign("a",Binop(Var "a",Plus,Binop(Var "b",Times,Var "c")));Print [Var "a"];Assign("d",If(Var "d",Var "a",Var "b"));Print [Var "d"]]
첫번째것이 그냥 일반적인 코드처럼 작성한 것이고
두번째것이 그것을 파싱해서 ocaml interpreter에게 인식시켜줄 수 있는 형태입니다.
당연히 첫번째것으로 만드는것이 테스트 할때 훨씬 편하겠지요. 저 수많은 괄호들........ _________________ TA |
|
위로 |
|
|
장수원
가입: 2008년 9월 26일 올린 글: 167
|
|
위로 |
|
|
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|