Frage

Hintergrund: - es gibt formale Sprachen für Programmiersprache gültig Lexikon zum Ausdruck und Syntax - solche Darstellungen (z regulären Ausdruck und kontextfreie Grammatiken) können automatisch in Lexikon / Syntax-Analysatoren für einige Programmiersprache kompiliert werden mit einigen Tools (z LEX und YACC)

Fragen: - gibt es solche formale Sprachen zur Definition von Semantik Programmiersprache? - gibt es zu automatisieren Compiler den Code der semantischen Analyse Erzeugung basierend auf diesen formalen Sprachen? - alle Ressourcen in Bezug auf Quellcode semantische Analyse lesen

Anmerkungen: - Sie könnten meine Frage unrealistisch finden, es ist ok ... Ich bin ein Neuling auf Compiler? - durch semantische Analyse i für die nächsten Schritte der Code-Optimierung und Generierung wirklich aus Code der Quelle notwendige Informationen, die das Sammeln ... dies soll Typen / Grenzkontrolle umfasst ... etc

ich hoffe, dass ich mich klar Vielen Dank im Voraus

War es hilfreich?

Lösung

Es gibt viele Systeme für die Semantik von Programmiersprachen zu definieren: Denotationelle Semantik (die Syntax in Funktionen zuordnet, die Programmzustand berechnen); operationale Semantik (die für Ihre Sprache Gebäude Dolmetscher beträgt), transformierende Semantik (die zu übersetzen Ihre languauge zum anderen beträgt Sprache, für die einige andere Semantik bereits vorhanden ist), etc.

Sehr wenige von ihnen derzeit auf Systeme verwendbar für echte Programmiersprachen führen. Einer der anderen Antworten hier schlägt Centaur als ein System, das dies zu tun versucht. Aktion Semantik von Peter Mosses ist einer der ernsteren jüngsten Versuche.

Für reale Systeme eher Ad-hoc-Methoden sind derzeit die effektivste. Diese inlude Systeme, in denen die lexikalische und grammatikalische Syntax kann effektiv sein definiert (als Varianten von LEX und YACC) und automatisch Bäume bauen. Attribut-Grammatiken, die Spezifikation von Berechnungen über Bäume ermöglichen, die es erlaubt, ein zu definieren einige Arten von Analysen, wie Symboltabelle Bau oder Metriken (technisch könnten Sie tun denotational Semantik auf diese Weise). Die meisten herkömmlichen Sprachen (C, Java, C #, COBOL, ...) haben alle relativ ähnliche Strukturen bezüglich Kontrollfluss und Datenfluß, und als Folge davon kann eine generische Flussanalyseroutinen bauen zu ermöglichen, eine über solche Standardsprachen zur Vernunft.

Schließlich müssen Sie ein Ziel für die semantische Analyse: Welche Fakten genau wollen Sie extrahieren? Die zur Verfügung stehende statische Analyse Systeme haben Hybridmuster-driven / prozeduralen Code für Methoden Sammeln Sie die Syntax, Symbol-Tabelle, und fließen Fakten von Interesse spezifische Antworten auf spezifische Fragen zu berechnen.

Einige Systeme ermöglichen eine dieser semantischen Informationen zu verwenden, zu tragen Quellcodemodifikation.

Ein System, das die mehr Ad-hoc-Ansatz oben folgt, ist unser DMS Software Reengineering Toolkit , die auch die allgemeine semantische defintions hat (Syntax, Symboltabellen, Datenfluss anlaysis) fertig für Echt Sprachen wie Java, C, C ++ und COBOL. DMS kann sich bewerben Quelle-Source-Transformationen auf die Ast Anlage durch verschiedene Tatsache Sammelverfahren, und dies ermöglicht Massen Transformation von Code in einer zuverlässigen Art und Weise.

Andere Tipps

Es gibt viele formale Sprachen für die Programmierung languauge Semantik - Blick auf die Wikipedia-Eintrag für einige mehr Begriffe google. Ich habe eine kleine Menge an Z in meiner frühen Karriere (das Link zu dem formalen Methoden Wiki ist ein weiterer möglicher Ort zu erkunden). Ich würde vorschlagen, auf dem Lambda des ultimative Forum fragen, wie die Menschen dort einige von ihnen verwenden, und kann vorschlagen, was für Fall, was auch immer verwenden Verwendung Sie im Sinn haben; dieses Papier etwas verwandten scheint, was Sie in Bezug auf die Erzeugung von Compilern gefragt - Sie brauchen sowohl die Semantik der Sprache und eine Beschreibung der Zielmaschine einen Compiler zu erstellen.

Speziell für die statische Analyse, Blick auf http: //rw4.cs. uni-sb.de/~martin/pag/

Was Sie beschreiben, ist genau das, was das Centaur-Projekt war etwa:

http://www-sop.inria.fr/croap/centaur /centaur.html

In der Tat, man konnte sehr weit in der Beschreibung der Semantik der Sprache, bis zu dem Punkt, wo das System konnte Sie für diese Sprache einen Dolmetscher geben (das ist, wenn man die Semantik vollständig beschrieben hatte). Aber Sie haben nicht den ganzen Weg zu gehen. Sie könnten weniger Beschreibung der Arbeit tun, und noch einen strukturierten Editor und typechecker für Ihre Bemühungen erhalten.

Auch wenn Arbeiten an dem Projekt aufhörte (soweit ich das beurteilen kann), können Sie interessante Artikel finden und in den Links herunterladen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top