2010-11-27 10 views
7

Die Probleme bei der Analyse von C++ sind bekannt. Es kann nicht rein auf Syntax basierend analysiert werden, es kann nicht als LALR (was auch immer der Begriff ist, ich bin kein Sprachtheoretiker), die Sprachspezifikation ist eine Zillion Seiten, etc. Aus diesem und anderen Gründen ich Ich entscheide mich für eine alternative Sprache für meine persönlichen Projekte.Ist Vala eine vernünftige Sprache im Vergleich zu C++?

Vala sieht wie eine gute Sprache aus. Obwohl es viele Verbesserungen gegenüber C++ bietet, ist es genauso mühsam zu analysieren. Oder hat es eine formale Grammatik von ordentlicher Länge oder eine logische Beschreibung, die sich zum Erstellen von Parsern für Compiler, Quellanalysatoren und andere Tools eignet?

Wie auch immer die Antwort lautet, gilt das für die alternative Syntax von Genie?

(ich frage mich auch, wenn auch weniger intensiv über D und andere post-C++ nicht-VM Sprachen.)

+2

Merkmale sind ein guter Grund, eine bestimmte Sprache für ein Projekt auszuwählen, aber was macht es aus, wie schwierig diese Sprache zu parsen ist? (Es sei denn, Ihr persönliches Projekt schreibt einen Compiler für diese Sprache). In diesem Sinne ist C++ keine LR (1) -Grammatik, wie Java und C#, und kann möglicherweise unendliches Lookahead beinhalten. – birryree

+0

Vana 'sollte' besser als C++ sein. Ich weiß, Java ist wirklich gesund, ich habe einen Java-Parser in Java geschrieben und von einem Compiler-Compiler direkt aus der Grammatik in EBNF generiert. – Lagerbaer

+0

Err .. it * kann * basierend auf Syntax syntaktisch analysiert werden, zumindest soweit jede Sprache auf diese Weise betrachtet werden kann (natürlich sind Dinge wie Kennungen technisch kontextsensitiv, aber sie sind in den meisten Sprachen üblich). Ja, die Grammatik ist nicht LALR (1), aber es ist natürlich parsabel. Auf der anderen Seite sollte die Schwierigkeit des Parsens wirklich nicht das Hauptkriterium für die Wahl einer Sprache sein - es gibt eine Menge über die Popularität (und daher die Leichtigkeit, Bibliotheken zu erwerben) für eine bestimmte Sprache. –

Antwort

7

C++ ist eine der komplexesten (wenn nicht die komplexeste) Programmiersprache gemeinsam zu analysieren benutzen. Eine besondere Schwierigkeit sind die Regeln für die Namenssuche und die Instanziierung von Vorlagen. C++ kann nicht mit einem LALR (1) -Parser analysiert werden (wie die von Bison und Yacc erzeugten Parser), aber es ist auf jeden Fall parsierbar (schließlich benutzen Leute Parser, die kein Problem haben, C++ jeden Tag zu analysieren). ( In der Tat, frühe Versionen von G ++ wurden oben auf Bison Generalized LR-Parser-Framework aufgebaut Eigentlich nicht, siehe Kommentare), bevor es in jüngster Zeit mit einer Hand geschrieben Rekursiver Abstieg ersetzt) ​​

Auf der anderen Seite, ich Ich bin mir nicht sicher, ob ich sehe, welche "Verbesserungen" Vala gegenüber C++ bietet. Die Sprachen versuchen, die gleichen Ziele zu erreichen. Auf der anderen Seite werden Sie wahrscheinlich nicht viel außerhalb von GTK + finden, das mit Vala-Schnittstellen geschrieben wurde. Sie werden C-Schnittstellen zu allem anderen verwenden, was die Verwendung einer solchen Sprache wirklich verhindert.

Wenn Sie C++ wegen seiner Komplexität nicht mögen, könnte es eine gute Idee sein, stattdessen Objective-C zu betrachten, weil es eine einfache Erweiterung von C ist (wie Vala), aber eine viel größere Gemeinschaft von Programmierer für Sie, um ihre Grundlage für alles in Mac Land zu ziehen.

Schließlich verstehe ich nicht, warum die Schwierigkeit beim Parsen der Sprache selbst damit zu tun hat, was ein Programmierer beachten sollte, um die Sprache zu benutzen. Nur meine 2 Cent.

+0

+1 für diesen letzten Teil, sollte Parsability nicht einmal ein Anliegen für den durchschnittlichen Entwickler sein. –

+0

Ich bezweifle, dass g ++ auf der verallgemeinerten LR-Parser-Infrastruktur von Bison basiert: Dieser wurde 2002 in Version 1.5 hinzugefügt. AFAIK, der Parser vor 3.4 war LALR-basiert mit mehr oder weniger sauberen Hacks, um C++ zu handhaben. – AProgrammer

+0

@AProgrammer: Ich fürchte, ich verstehe es nicht. C++ kann einfach nicht mit LALR geparst werden. Wie könnte man dafür "hacken"? –

6

Es ist ziemlich einfach. Sie können libvala verwenden, um sowohl Parsing als auch semantisches Analysieren und Codegenerierung durchzuführen, anstatt selbst zu schreiben.

Verwandte Themen