2010-11-27 2 views
7

C++ 구문 분석 문제는 잘 알려져 있습니다. 순수하게 구문을 기반으로 구문 분석 할 수는 없지만 LALR (용어가 무엇이든 저는 언어 이론가가 아닙니다), 언어 사양은 수십 페이지입니다. 그 이유 및 기타 이유로 내 개인 프로젝트를위한 대체 언어를 결정하는 중입니다.Vala는 C++과 비교하여 구문 분석에 적절한 언어입니까?

발라는 훌륭한 언어처럼 보입니다. C++에 비해 많은 개선점을 제공하지만 구문 분석하기가 번거롭지 않습니까? 또는 컴파일러, 소스 분석기 및 기타 도구 용 파서를 작성하는 데 적합한 깔끔하고 합리적인 길이의 공식 문법 또는 논리적 인 설명이 있습니까?

답이 무엇이든 지니 대체 구문은 무엇입니까?

(나는 또한 D 및 기타 사후 C++ 비 VM 언어에 대해 덜 강렬하게이기는하지만 궁금합니다.)

+2

기능은 프로젝트에 특정 언어를 선택해야하는 좋은 이유이지만 해당 언어의 구문 분석이 얼마나 중요합니까? (귀하의 개인 프로젝트가 해당 언어에 대한 컴파일러를 작성하지 않는 한). 그 메모에서 C++은 Java 및 C#과 같은 LR (1) 문법이 아니며 잠재적으로 무한한 미리보기를 포함 할 수 있습니다. – birryree

+0

Vana는 C++보다 saner해야합니다. Java가 정말로 제정신 인 것을 알고 있습니다. Java로 작성된 Java Parser를 사용하고 EBNF의 문법에서 직접 컴파일러 컴파일러로 생성했습니다. – Lagerbaer

+0

Err .. 적어도 어떤 언어도 그런 식으로 간주 될 수있는 한 구문을 기반으로 구문 분석 될 수 있습니다 (물론 식별자는 기술적으로 상황에 민감하지만 대부분의 언어에서 공통적입니다). 그렇습니다. 문법은 LALR (1)이 아니지만 물론 파싱 가능합니다. 다른 한편, 구문 분석의 어려움은 언어 선택에 대한 주요 기준이되어서는 안됩니다. 특정 언어에 대한 대중성 (따라서 도서관 구매 등의 용이함)에 대해 언급해야 할 것이 많습니다. –

답변

7

C++가 공통으로 구문 분석합니다 ( 가장 복잡하지 않을 경우 ) 프로그래밍 언어 가장 복잡한 중 하나입니다 용도. 이름 찾기 규칙과 템플릿 인스턴스화 규칙은 특히 어려움이 있습니다. C + +는 LALR (1) 파서 (Bison과 Yacc에 의해 생성 된 파서와 같은)를 사용하여 파싱 할 수 없지만, 결국 파싱 가능합니다 (사람들은 매일 C++을 파싱하는 데 문제가없는 파서를 사용합니다). ( 사실 G ++의 초기 버전은 Bison의 일반화 된 LR 파서 프레임 워크 위에 구축되었습니다. 최근에 손으로 작성된 재귀 적 파서로 대체되기 전에 실제로는 그렇지 않습니다. 주석을보십시오)

반면에 Vala가 C++에 비해 "개선 된 사항"을 확인하지 못했습니다. 언어는 동일한 목표를 달성하려고 시도합니다. 반면에 Vala 인터페이스로 작성된 GTK + 이외의 것을 많이 찾지는 않을 것입니다. 여러분은 C 인터페이스를 다른 모든 것에 사용하게 될 것입니다. 실제로 그러한 언어를 사용하는 데는 어려움이 있습니다.

복잡성 때문에 C++이 마음에 들지 않는다면 Objective-C를 고려해 보는 것이 좋습니다. 이는 C의 간단한 확장 (Vala와 같은)이지만 훨씬 더 큰 커뮤니티가 있기 때문입니다. 프로그래머가 Mac 기반의 모든 것을위한 기초가되면 그릴 수 있습니다.

마지막으로, 언어 자체를 구문 분석하는 어려움이 프로그래머가 언어를 사용하기 위해 신경 써야하는 것과 관련이있는 이유는 알 수 없습니다. 단지 2 센트.

+0

+1이라면, parsability는 일반 개발자들에게는 관심이 없어야합니다. –

+0

나는 g ++가 Bison의 일반화 된 LR 파서 인프라에 기반하고 있다고 생각합니다. 2002 년에 1.5 버전에 추가되었습니다. AFAIK, 3.4 이전 파서는 LALR을 기반으로 C++을 처리 할 수있는 깨끗한 해킹을 기반으로했습니다. – AProgrammer

+0

@AProgrammer : 이해가되지 않을까 걱정됩니다. C++은 단순히 LALR을 사용하여 파싱 할 수 없습니다. 그걸 어떻게 지원할 수 있습니까? –

6

아주 간단합니다. libvala를 사용하여 구문 분석, 의미 분석 및 코드 생성을 직접 수행 할 수 있습니다.

관련 문제