 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
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` 파일에서 확인하실 수 있으니, 관심이 있으시다면 해결책을 찾아 웹보드에 공유해주셔도 좋을 것 같습니다.
감사합니다. _________________ TA 안중원
TA e-mail: ta310@ropas.snu.ac.kr
personal e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|