Coco/R은 컴파일러 생성기로 소스 언어의 문법을 취하고이 언어의 스캐너와 구문 분석기를 생성합니다. 스캐너는 결정 론적 유한 오토 마톤으로 작동합니다. 파서는 재귀 하강을 사용합니다. LL (1) 갈등은 다중 상징적 인 룩보드 또는 시맨틱 점검으로 해결 될 수 있습니다. 따라서 받아 들여진 문법의 클래스는 임의의 k에 대해 ll (k)입니다.
나는 Coco / R의 터보 파스칼 버전을 오랫동안 사용해 왔습니다. 때로는 코드를 변경해야했습니다. 출처가 변경되면 다시 컴파일했습니다. 그러나 일부 Windows 업데이트 후 Turbo Pascal이 더 나은 곳으로 가서 달리기를 중단한다는 것을 알았습니다. 일반적으로 Niklaus Emil Wirth의 많은 사람들의 언어가 싫어한다고 생각합니다.
일반적으로 프로그래밍 및 컴퓨터 과학 언어 개발에 비슷한 기여를 한 사람들은 거의 없다고 생각합니다.
문제에 대한 복잡하고 종종 이해할 수없는 솔루션을 찾는 것은 쉽습니다. 간단하고 깨끗하며 이해하기 쉬운 솔루션을 만드는 것은 어렵습니다.
그러한 결정을 볼 때 이것이 대문자가있는 그랜드 마스터의 작품이라는 것이 분명해집니다. 먼저 Turbo Pascal에서 코드를 포팅했습니다. 그러나 나는 거의 20 년 만에 다리 아래에 많은 물이 흐르고 Coco/R 코드도 잘 개선되었다는 것을 발견했습니다.
내가 찾은 마지막 버전은 C ++, C #, Java였습니다. 그런 다음 코드를 포트하고 C #을 선택하기로 결정했습니다. 정신적으로, 이것은 델파이와 가장 가까운 언어 일 것입니다.
Protobuf-Delphi 프로젝트에서 사용의 예를 볼 수 있습니다.
스캐너와 다른 언어에는 동일한 프레임 세트를 사용해야합니다. 컴파일러는 스캐너 및 파서의 상당히 고정 된 프레임 구조에 의존합니다. 섹션 순서를 변경하는 것은 바람직하지 않습니다. 이로 인해 생성 된 코드에서 컴파일 오류가 발생할 수 있습니다.
Cocor.exe -namespace Taste -checkEOF -trace AG taste.atg.
모듈 이름을 생성 할 때 네임 스페이스가 사용됩니다. 이것은 이제 스캐너 및 파서 프레임에 사용됩니다.
MACROS
prefix = "cr" .