컴파일러 수업을 듣다 이해가 안가는 부분이 있어 질문드립니다.

geneven의 이미지

지금 Top-down방식의 파서인 LL(1)파서를 배우고 있습니다. 다음과 같은 문법이 주어졌을때 S => ( S ) S | e(epsilon입니다)
S가 (S)S로 transition 될 것인지 e로 transition될것인지 결정해야 하는데 FOLLOW를 구성하여 S의 다음요소가 terminal일 경우 e로 transition한다고 배웠습니다. 궁금한것은 FOLLOW를 어떻게 찾는것인가인데, 위의 예제의 경우 S다음에 오는 요소가 terminal일경우 FOLLOW가 되므로 쉽게 e로 transition된다고 말할수 있는데

Quote:

statement => if-stmt | other
if-stmt => if (exp) statement else-part
else-part => else statement | e
exp => 0 | 1

다음과 같이 문법이 여러줄이 되면서 어떻게 FOLLOW를 구할수 있는지 갑자기 이해하기가 어려워졌습니다.
오호라의 이미지

^^; 오죽하면 EBNF를 쓰겠습니다. 댕글댕글문제.

geneven님께서 이해가 안돼시는게 당연합니다. 책을 잘 찾아보시면 어느 구석에 이런 구절이 있을겁니다.

Quote:
if-statement 어쩌구저쩌구 애매모호함 or 애매함 or ambiguous ...

추천도서 : http://scitech.co.kr/details.html?h_code=&book_num=452

예전 1학년때 xx대 김xx강사님께서 C언어로된 볼링점수계산 프로그램을 과제를 주시면서 베이직된 소스를 주셨죠.

애들은 죽어라 그대로 문법만 옮겼죠. 결과는...크하하!!

수십명이 한결같이 말하더군요. "정말 그대로 옮겼다. 그대로 옮기면 교수님이 된다고 했다."

"아. 이 인간들 댕글댕글문제도 모르는군...ㅠㅠ"

하긴 결과적으로 강사님이 베이직소스에서 if문을 수정해서 다시 올려주셨다는...크하하!!

일단 컴파일러 책을 덮고, Visual Basic, Visual C++ 을 돌려 보세요.

if ( foo_bool )
  /* foo_bool is ture */
  else if ( bar_bool )
  /* bar_bool is ture */
  else
  /* Who am i?, I'm your bbangsang. */

goooogle님의 축복을 받으면 쉽습니다.

[참고]
소스 : www.myevan.net/tag/FOLLOW?TSSESSION=1c23d6f22dd5333e6799c2486b1de732
pdf : www.ul.ie/~flanagan/ce4717/notes/dangling-else.pdf
ppt : www-static.cc.gatech.edu/classes/AY2006/cs3240_summer/Lectures/lecture9.ppt

ps. 과제가 아니시길...

Hello World.

M.W.Park의 이미지

졸업한지가 꽤 되놔서 잘 기억은 안나지만 (사실 학교다닐 때는 이해하기 보다는 무조건 외웠던 기억이...Orz),
recursive(self referential?)하게 정의된 production rule은 substitution model로 생각하면 개념을 잡기가 쉬웠던 것같군요.

괴델 에셔 바흐를 한번 읽어 보시는 것도 도움이 될것같긴 한데...
좀 머리가 아플지도... ^^;
-----

오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.