사람이 읽을 수있는 구문과 단어 (예 : Python, VB.NET)로 구성된 프로그래밍 언어에 대한 개발 환경 오류 피드백 및 자동 완성 기능을 제공하기 위해 필요한 수표/덜 엄격한 코드 분석이 적습니까? 이는 코드 구조에 대한 기호와 구두점에 더 의존하는 C 스타일의 언어와는 대조적입니다.언어 구문에 따라 IDE 오류 감지 및 자동 완성의 복잡성이 있습니까?
답변
나는 경험이 있거나/dozens of language front ends을 건축 할 책임이 있습니다.
말씨 어와 구두법 언어는 일반적으로 구문 분석하고 정적으로 분석하기가 어렵습니다.
어느 종류의 언어를 정의하는 사람들은 복잡한 구문과 복잡한 이름 확인 및 형식 유추 규칙을 사용하여 수십 년 동안 꾸미거나 (예 : COBOL을 1958 년) 또는 정교한 언어 (C++, Scala, Ruby)를 작성했습니다 ; 그런 다음 컴파일러 공급 업체는 이상한 일을 지원하거나 고객 잠금 (예 : MS "관리 C++", DLL 선언 등)을 제공하기 위해 모호한 구문을 추가합니다. 형편없는 정의의 세 번째 문제가 있습니다. 인기있는 언어는 어떻게 작동하는지에 대한 정확한 규칙을 가지고있을 수 있지만, 많은 언어에는 실제 구현에 대한 고통스러운 실험을 통해 다크 코너 케이스를 생성하는 부실한 정의 (예 : PHP)가 있습니다.
C++는 가장 최악입니다. C++ 11위원회는 최근 대규모의 사물을 엉망으로 만들고 있습니다. 우리에게는 완전한 C++ 파서가 있지만 C++ 98 구현의 최상위에서 C++ 11의 전체 이름 확인 작업을 계속하고 있습니다. (이름 확인 코드는 약 250,000 줄의 코드로 충분하지 않습니다!).
IBM COBOL은 닫기 시간입니다. 언어는 단지 거대하고 재미있는 이름 해석 규칙이 있습니다 ("참조가 명확하지 않으면 규정되지 않은 이름은 규정이없는 특정 이름을 참조 할 수 있습니다").이 이름은이 문맥에서 명확한 참조입니까?).
구문 분석 및 이름/형식 분석이 완료되면 제어 흐름, 데이터 흐름, 지점 간 분석, 범위 분석, 콜 그래프 구성 등의 작업을 수행합니다. 일반적으로 다음과 같은 노력이 필요합니다. 초기 단계; 우리는 이러한 작업을 지원하는 정말 좋은 도서관을 운영함으로써 그만큼 도망 갈 수 있습니다.
이 모든 것을 백그라운드 분석으로 사람들이 원하는 똑똑한 종류의 "정적 분석"을 시작할 수 있습니다.
다른 포스터는 구문 오류를 복구하고 "중요한 오류 메시지를 계속 생성합니다"라는 점에 유의했습니다. 제가 말할 수있는 것은 "아멘, 형제"입니다. 당신이 "부분적인 프로그램"을 가지고있을 때 무엇이 잘못되는지에 대한 논의는이 SO의 대답 https://stackoverflow.com/a/6657974/120163을 보라. 이것은 본질적으로 문법 오류 수리가 고침에서 추측 될 때 얻을 수있는 것이다.
이것은 내가 찾고있는 대답이다. 제가 할 수있는 말은 당신이하는 일에 대한 감사입니다. 이것은 정말 어려운 것 같습니다. –
좋은 칭찬입니다. 고마워요. 내가이 특별한 직업 선택을 따르는 날들이있다 : -} –
피할 수있는 "쉽게"를 정의하기 전에 "자세한 정보"및 "간결한 정보"를 정의하십시오. – jason
@ Close Voters :이 질문은 VB가 더 좋은지 아닌지에 관한 것이 아닙니다. – GSerg
제 생각에, 자세한 정보는 아닙니다. 오히려 C#에서는 더 많은 것들이 허용되므로 파서는 한 줄의 코드를 해석 할 수있는 더 많은 방법을 가지고 있습니다. – GSerg