CNUCOM / compilers_CNU_2022

12 stars 1 forks source link

과제 2 출력 관련 질문드립니다. #28

Closed Tabbygray closed 1 year ago

Tabbygray commented 2 years ago

입력 test.go 파일이 다음과 같은데, 출력 내용을 따라가보니 뭔가 이상합니다. func newFunc(x int) { return 0 }

출력은 다음과 같습니다. (이해를 위해 번호 뒤에 문법 정의 내용을 추가했습니다.) 201702000 Rule 4-1 type_spec: INT 201702000 Rule 7-2 param : IDENT type_spec
201702000 Rule 6 params : param (',' param)*

201702000 Rule 14-1 return_stmt : RETURN 201702000 Rule 8-5 stmt : return_stmt
201702000 Rule 15-1 expr : (LITERAL|IDENT) 201702000 Rule 9 expr_stmt : expr
201702000 Rule 8-1 stmt : expr_stmt

201702000 Rule 11 compound_stmt : '{' local_decl stmt '}' 201702000 Rule 5 fun_decl : FUNC IDENT '(' params ')' type_spec compound_stmt 201702000 Rule 1-2 decl : fun_decl 201702000 Rule 0 program : decl+

이를 따라가 보면 우파스 과정을 역순으로 한 것과 동일해야 한다는건 이해했는데, return 0를 파스하는 과정이 이상합니다. (8-1 부터 14-1 까지, 중간에 띄어쓰기 한 부분) 직접 손으로 파싱을 해 봤는데, 결과가 이상합니다. photo_2022-09-18_19-13-47

return 0가 0을 return 하는 게 아니라, return 과 0을 각각 stmt로 파싱하고 있습니다. 이게 맞는건가요? return_stmt의 RETURN expr 구문으로 파싱해야 하는 것 아닌가요? 화면 캡처 2022-09-18 191433

PLASLaboratory commented 1 year ago

(함수 호출 이외의 g4파일 문법 오류) 이상한 것이 맞습니다. 문법이 우측 결합이 불가능하게 작성되어 있네요; 다음 과제 부터는 문법을 수정해서 재배포할테니 걱정안하셔도 됩니다.