-
2024년 11월 13일 프로그래밍 언어론 공부 6일차프로그래밍 공부 일지 2024. 11. 14. 00:54반응형
오늘은 P. 149 ~ P. 164, 구문 분석 파트를 공부했다.
어제와 동일하게 적으면서 공부했다.
구문 분석에 앞서 프로그래밍 언어를 이루고 있는 단어들, 어휘 분석을 먼저 공부했다. 어휘 분석 부분에는 토큰이라는 것이 나오는데 어려울 것이라 예상했는데 생각보다 간단했다. 연산자, 구분자, 식별자, 예약어 등 일반적으로 쓰는 모든 것이 토큰인 것 같다. 연산자와 구분자는 연산 기호나 문장 부호 같은 것들이고, 식별자는 변수나 함수의 이름을 나타내는 것, 예약어는 프로그래밍 언어 자체에서 정의되어 포함된 것들을, 즉 if, for, int 같은 것들을 뜻한다.
구문 분석은 유도를 할 수 있냐 없냐에 따라서 오류가 있냐 없냐를 파악함으로 진행되는 것 같다. 유도라는 것은 구몬 규칙을 이용하려 주어진 프로그램을 만들어내는 과정이라고 한다. 그리고 그것을 트리 형태로 나타낸 것이 파스 트리라고 한다.
유도라는 것은 후속 과목인 컴파일러 구성에서 배운다고 책에 나와있었다.
유도를 할 수 있어 파스 트리가 존재하면 구문에 부합하게 된다. 하지만 모호성은 존재한다. 모호한 문법은 같은 표현인데 서로 다른 파스 트리가 만들어지는 문법을 뜻한다. 다른 파스 트리가 만들어지니 자연스럽게 다른 결과값을 내게 된다. 이러한 모호성을 줄이기 위해서 문법의 명확화 라는 것을 진행한다. 보통 새로운 비단말 기호, 새로운 구문 규칙을 추가하여 모호성을 제거하게 된다.
문법의 명확화로 3가지를 알려주었다. 연산자 우선순위, 좌결합 연산자 그리고 중첩된 if문의 else 이렇게 3가지가 나와있었다. 연산주 우선순위(곱하기 나누기 먼저, 더하기 빼기 나중에 계산)와 좌결함 연산자(왼쪽부터 차례로 계산)는 수학을 배운 우리에게는 너무도 당연한 것들이지만, 프로그래밍 언어에서는 이런 것들을 직접 정리해주어야 하는 모양이다. 중첩된 if문의 else는 else를 어느 것에 적용시켜야 하는지 애매한 경우가 생기기에 나온 것 같다.
그냥 어떤 원리로 진행이 되는구나 정도로만 보고 지나갔는데 은근 재밌었다. 서로 다른 파스 트리가 나와서 어떻게 하는거지 싶었는데 우선순위에 따라서, 다음 단계로 넘겨서 처리하게 하는 그런 방법들이 재밌게 느껴졌다.
오늘은 좀 끊어가면서 공부했다. 처음보는 개념들도 많았고 이해하는데 시간을 좀 넉넉하게 활용했다. 아예 안하는 것보다는 대략적으로라도 그런 것이 있구나, 그런 원리로 하는 거구나 라는 것들을 좀 알게 된 것 같다.
반응형'프로그래밍 공부 일지' 카테고리의 다른 글
2024년 11월 12일 프로그래밍 언어론 공부 5일차 (2) 2024.11.13 2024년 10월 26일 프로그래밍 언어론 공부 4일차 (1) 2024.10.27 2024년 10월 25일 프로그래밍 언어론 공부 3일차 (1) 2024.10.26 2024년 10월 24일 프로그래밍 언어론 공부 2일차 (1) 2024.10.25 2024년 10월 23일 프로그래밍 언어론 공부 1일차 (7) 2024.10.23