컴파일러에 기본개념부분인데 .. 질문드려요!

sunpark20의 이미지

수업시간에 졸았더니 봐도 봐도 해깔려서 질문 드려요 ㅠㅠ
가상기계와 코드생성 이라는 파트에요~ . lex와 yacc등을 이용해 구문분석단계를 끝내고 가상코드들을 생성하는 챕터인데요
프로시져의 활성레코드 ! 라는 부분을 잘모르겠네요

프로시져의 활성레코드는

함수반환값 / 제어링크 /반환주소 /매개변수 /지역변수 /임시스택
(fp) (sp)
로 이루어 져 있어요 fp가 활성레코드의 시작위치를 저장해놔서 상대주소를 쓸수 있어요~~

그래서 지역변수의 위치!!

매개변수는 i번째 : FP+2+i 가 되고 (2는 제어링크와 반환주소 2개를 뺀것이라고 생각~)
지역변수는 i번째 : FP+2+p+i
p : 매개변수의 개수

그래서 지역변수 접근 명령어를 만들어요
lod a SP:=SP + 1 ;
STORE[SP] := STORE[FP+a] (상대주소로 바꿔서 sp에 가져오는것 이라고 생각)
lda a SP:=SP + 1 ;
STORE[SP] := FP + a (상대 주소값을 sp에 가져오는 것이라고 생각) <-- 잘모르겠어요 ㅠㅠ
str a STORE[FP+a] := STORE[SP]; (상대주소에 있는값에 스택포인터에 있는 값을 넣는것 )
SP :=SP - 1

그리고 프로시져 /함수 호출 명령어 부분입니다 요기는 정말 모르겠네요 ㅠㅠ
tive 인가 .. 이 언어의 명령어랑 완전똑같던데 한글도 없고 못찾았어요..

-활성레코드 조작

mst STORE[SP+2] :=FP; (이게 뭘 의미하는지 모르겠어요 ㅠㅠ )
SP:=SP+3
cup p a FP:=sp-(p+2); (요기두요 ..)
STORE[FP+2] :=PC;
PC:= a;

-스택포인터 조작
ssp a SP:=FP + a

-프로시져/함수 반환 명령어

retf SP := FP; (SP에 FP의 주소를 가리킨다~ 즉 함수불렀던 곳으로 간다 ~)
PC := STORE[FP+2]; ( PC는 FP+2 ?? 반환값 같은것을 가지로 가는건가요?? )
FP := STORE[FP+1] ( ㅠㅠ?)
retp SP := FP - 1; ( ㅠㅠ?? 이번엔 왜 -1??)
PC := STORE[FP+2]; (뭐하는건지 모르겠네요 잘.. 활성레코드부터 이해가 잘 안되니까 다 해깔리네요 이것 좀 명확하게
FP := STORE[FP+1] 설명해주셨으면 감사하겠습니다 ㅠㅠ)

oosap의 이미지

답변은 아니고 질문을 드립니다 ^^;
질문하신 내용중에 나오는 코드는 수도코드인가요? 컴파일러 과목은 어떤 책으로 배우세요?
저는 컴파일러에 관심이 많으나 전공하지 않아서 기초가 없습니다. 답변이 아니라서 죄송합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

sunpark20의 이미지

가상으로 만든 기계어 코든데 실제로 동작하는 코드 같아요
교수님이 번역하신것 같은데 web.donga.ac.kr/jwjo 에 가시면 자료가 있어요~~
리눅스로 lex랑 yacc이용해서 직접 만들면서 배웠어요~~ ㅎ.ㅎ

oosap의 이미지

질문하신데 답변은 못해드리고 강의자료만 입수했네요.. ^^;
저도 컴파일러를 공부하고 있는데 교과서는 보지 않고 오픈소스를 보고 있습니다.

하시는 공부 잘 하시고요... 이곳에 답변이 없었을 때는 스택오버플로 같은 곳에서 물어보시면 답변 받을 수 있을 겁니다.
http://stackoverflow.com/

그곳에서는 이미 답변된 글들도 있을테니 먼저 그런게 있나 찾아보는 것도 좋구요...

또, gcc 나 clang/llvm 커뮤니티의 메일리스트에 물어보면 좋은 답변들이 올 것 같습니다.
http://clang.llvm.org/
http://llvm.org/

열공하세요..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.