게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

[과제 4] K- 스켈레톤 코드 parser conflict 관련

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
2021-14424



가입: 2026년 3월 16일
올린 글: 3

올리기올려짐: 2026년4월10일 19:40    주제: [과제 4] K- 스켈레톤 코드 parser conflict 관련 인용과 함께 답변

안녕하세요, 수강생 이서준입니다.

원문:
인용:
다름이 아니라 과제 4 중 1번 K- 구현에서, parser.mly에 문제가 발생하는 것 같아 질문드립니다.

현재 코드 상에서는 dune build --release 를 하면 다음과 같은 에러가 발생하는 상태입니다.

File "lib/dune", lines 5-6, characters 0-27:
5 | (menhir
6 | (modules parser))
(cd _build/.sandbox/f90c40dcc3dde4ebcadcb02c84d066ab/default && /Users/seojune/.opam/default/bin/menhir --explain lib/parser.mly --base lib/parser --infer-read-reply lib/parser__mock.mli.inferred)
Warning: one state has shift/reduce conflicts.
Warning: one state has reduce/reduce conflicts.
File "lib/parser.mly", line 56, characters 4-16:
File "<standard.mly>", line 249, characters 2-7:
Error: do not know how to resolve a reduce/reduce conflict
between the following two productions:
expr -> expr LB expr
separated_nonempty_list(COMMA,expr) -> expr
Warning: one shift/reduce conflict was arbitrarily resolved.
Warning: one reduce/reduce conflict was arbitrarily resolved.


환경 문제일 수도 있을 것 같아 eval $(opam env)를 해서도 시도해봤고, k.ml에서 구현을 하기 전/후에 대해 모두 시도해봤지만 동일한 문제가 발생하는 것을 확인하였습니다.

현재 파서 코드(parser.mly)를 보면, 다음과 같은 reduction rule이 존재하는데요 (LB='<', RB='>')


| expr LB expr { K.K.LESS ($1,$3) }
| expr LB exprs RB {
match $1 with
| K.K.VAR x -> K.K.CALLR (x, $3)
| _ -> raise (ParsingError "callee of CALLR must be VAR")
}

expr < expr와 같은 형태가 나왔을 때 바로 expr -> expr < expr 규칙을 사용하여 reduce할 수도 있고, 아니면 두 번째 expr을 exprs->expr 규칙을 사용해 exprs로 reduce할 수도 있기 때문에 reduce-reduce conflict가 발생하는 상황인 것 같습니다.

해결을 위해서는 parser.mly에 수정이 필요할 것 같은데요, 혹시 제가 환경 설정을 잘못 한 부분이 있거나 코드를 잘못 이해한 부분이 있다면 알려주시면 감사드리겠습니다.

감사합니다.

이서준 드림

---

opam switch 설정에 문제가 있어서 발생한 현상으로, switch를 제대로 설정하니 해당 부분은 warning만 발생하고 에러는 나지 않는 점을 확인했습니다. 번거로움 끼쳐드려 죄송합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
안중원
Site Admin


가입: 2023년 3월 13일
올린 글: 46

올리기올려짐: 2026년4월12일 2:17    주제: 인용과 함께 답변

안녕하세요, 조교 안중원입니다.

우선은 문제가 잘 해결되셨다니 다행입니다.

해당 파싱 규칙 충돌에 대해서는 조교들도 인지하고 있으며, 충돌 자체는 해결이 쉽지 않으나 숙제를 진행하는 데에 있어서는 크게 문제가 되지 않을 것으로 판단되어 그대로 둔 상태입니다. 저희가 테스트해보았을 때, 파싱 문제가 있을 때에는 함수 인자에 괄호를 쳐주면 대부분의 경우는 해결이 되는 것으로 보입니다.

parser.mly 컴파일 과정에서 생기는 구체적인 경고 메시지는 `_build/default/lib/parser.conflicts` 파일에서 확인하실 수 있으니, 관심이 있으시다면 해결책을 찾아 웹보드에 공유해주셔도 좋을 것 같습니다. Very Happy

감사합니다.
_________________
TA 안중원
TA e-mail: ta310@ropas.snu.ac.kr
personal e-mail: jwahn@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay