커스텀 문법 추가하기
02. cPython 폴더 구조 에서 말씀드린 것처럼, Grammer/python.gram
파일에 모든 문법의 PEG가 명시되어 있음을 설명드렸습니다.
여기에 커스터 문법을 추가해보려고 합니다. 추가하려는 문법은 proceed
이고, 이 의미는 pass
와 동일합니다.
- 커스텀 문법 추가하기
Grammer/python.gram
파일에small_stmt[stmt_ty]
블록을 찾아가면'pass' { _Py_Pass(EXTRA) }
파싱 문법이 있습니다.
단순하게 proceed
를 추가하여 동일한 효과를 누리게 합니다.
'pass' | 'proceed' { _Py_Pass(EXTRA) }
- Parser 빌드
make regen-pegen
- cPython 빌드
make -j2 -s
- 테스트
./python.exe
>>> def example():
... proceed
...
>>> example()
문법 변경에 대한 논의
문법을 추가하고 변경하는 건 쉽지만 그 추가하는 과정에 있어서 많은 논의가 이루어진다. 이 논의는 주로 PEP 버전으로 제안되곤 한다.
Python의 문법 수정에 유의해야 하는 이유는, 다음과 같다.
- 지나치게 많은 언어적 기능이나 복잡한 문법은 간단하고 쉬운 언어를 지향
- 문법을 변경하면 하위 호환성이 깨지기 때문에 모든 개발자가 변경에 대응