Hey. Ich nehme einen Kurs mit dem Titel "Principles of Programming Languages", und ich muss mich für ein Projekt für diesen Sommer entscheiden. Hier ist eine kurze Version dessen, was das Projekt erreichen muss:
"Die Art des Projekts ist die Sprachverarbeitung. Das Schreiben eines Scheme / Lisp-Prozessors ist ein Projekt dieses Typs. Ein Compiler für eine Sprache wie C oder Pascal ist ebenfalls ein potentielles Projekt dieser Art. Einige ehemalige Studenten haben Projekte gemacht Ein anderes mögliches Projekt könnte sich auf die Mustererkennung und Manipulation von XML beziehen. Lisp, Pascal und C führen normalerweise zu den einfachsten Projekten. "
Ich bin sehr an Webtechnologien interessiert und habe etwas Erfahrung mit PHP, MySql, JavaScript usw. und möchte etwas Weborientiertes tun, aber ich habe Probleme, irgendwelche Ideen zu entwickeln. Ich möchte auch, dass dies ein wertvolles Projekt ist, das eine gewisse Bedeutung haben könnte, anstatt nur das Gleiche zu tun wie alle anderen in der Klasse.
Irgendwelche Ideen? Danke!
EDIT: Ich mag die Idee eines Latex-zu-XHTML / MathML-Übersetzers sehr, und ich habe die Idee an meinen Lehrer weitergegeben, in dem er zurückgeschrieben hat:
"Ich denke, die Idee ist interessant, meine Frage (und Ihre Frage) ist, ob es angemessen ist.
Ich denke an LateX als eine Low-Level-Auszeichnungssprache. Ich frage mich, ob die Konvertierung zu XHTML oder MathML wirklich eine Veränderung der Ebenen und der Komplexität darstellt. Ich denke, Sie können mit ein wenig mehr Diskussion und einigen Beispielen Ihren Standpunkt erläutern. Sie könnten auch an andere Markup-Konstrukte denken, die die Beschreibung von Gleichungen erleichtern. "
Irgendwelche Ideen, wie man ihn davon überzeugen könnte, oder irgendwelche Erweiterungen dieser Idee, die für die Ziele meines Projekts funktionieren könnten?
Danke für alle bisherigen Antworten!
Ich habe diesen Kurs letztes Semester beendet:)
IMHO der beste Weg zu gehen ist, einen Ausdruck Evaluator zu bauen. Erstellen Sie den einfachsten Ausdruckauswerter, den Sie können.
Fügen Sie dann diese Funktionen in der Reihenfolge hinzu, wie Sie möchten:
1 - konstante Symbole, Platzhalter für Variablen. Ihr Evaluator sollte nach dem Analysieren des Ausdrucks nach ihren Werten fragen.
2 - Variablen im Imperativstil. Wie Variablen in jeder imperativen Sprache, wo der Benutzer den Wert eines Symbols irgendwo im Code ändern kann.
3 - einfache Steueranweisungen. 'if-else' und pretest while-Schleife sind am einfachsten zu betrachten.
4 - Arrays. Wenn Sie wirklich möchten, dass Ihr Expression-Evaluator wirklich wie eine Programmiersprache ist. Es wäre interessant, wenn Sie Ihrer "Sprache" ein Array mit variablen Dimensionen hinzufügen würden. Sie müssen eine generische Zuordnungsfunktion für Ihre Arrays erstellen .
Jetzt haben Sie eine echte Programmiersprache. Um nützlich zu sein, können Sie Unterroutinen hinzufügen. so die Liste kontinuierlich:
5 - Unterprogramme. Dies ist etwas schwieriger als vorherige Features, aber es sollte nicht unmöglich sein:)
6 - Erstellen Sie eine einfache Mathematikbibliothek für Ihre neue Sprache in Ihrer eigenen Sprache! und das ist der spaßige Teil meiner Meinung nach;)
Sebest Buch ist ein gutes Buch, um berühmte imperative Programmiersprachen zu überblicken.
Hm, ordentlich! Vielleicht:
1.
Ein webbasierter Sprachinterpreter. zB ein sehr einfacher Assembly-Interpreter in Javascript oder ein PHP-basierter C-Interpreter (PHP-Skript liest C-Code und führt ihn in einer Art Sandbox-Art aus. Offensichtlich wäre es nur in der Lage, eine kleine Teilmenge des C zu implementieren Sprache)
2.
Vielleicht ein automatisierter Weg, um PHP-Datenstrukturen (wie PHP-Arrays) in SQL-Abfragen umzuwandeln und umgekehrt. Diese Art von Sachen wurde bereits gemacht, aber Sie könnten vielleicht etwas tun, das (zum Beispiel) eine SQL-Abfrage durchführt und die Array-Datenstruktur erstellt, die benötigt würde, um die von der SQL zurückgegebenen Informationen zu "halten". Es könnte komplexe Dinge wie JOINS und GROUP BYs unterstützen.
3.
Vielleicht ein C-to-PHP Compiler? (oder einen PHP-zu-C-Compiler, um einfachen PHP-Code nativ ausführen zu können. Verwenden Sie dies mit einer beliebigen Kombination von Sprachen)
bearbeiten:
4.
Vielleicht ein Regex-zu-C-Parser. Das heißt, etwas, das eine Regex braucht und C-Code erzeugt, um mit diesem Muster übereinzustimmen. Oder etwas, das eine Regex nimmt und es in eine FSM umwandelt, die die "mathematische" Übersetzung dieses Ausdrucks darstellt. Oder das Gegenteil - etwas, das eine FSM für eine CFL verwendet und die Perl-Syntax Regex dafür erzeugt.
5.
Vielleicht ein XML-zu-PHP / MySQL-Parser. ZB kann eine XML-Datei Informationen über eine Datenbank und Felder enthalten, und dann erstellt Ihr Programm das SQL, um diese Tabellen zu erstellen, oder den HTML / PHP-Code für die Formulare.
Viel Glück!
Ich würde mich von PHP und MySQL für ein Projekt wie dieses fernhalten. Bei beiden handelt es sich um kommerzielle Plattformen, die viele grundlegende CS-Prinzipien kompromittiert haben, um Marktanteile zu gewinnen und die Probleme von Benutzern zu lösen. Angesichts dessen, was Sie beschrieben haben, klingt es nach dem Sinn dieses Projekts, darüber nachzudenken, wie Programmiersprachen verarbeitet werden. Javascript Die Sprache (nicht die Browser-API) könnte hier eine gute Wahl sein. Das Schreiben eines Prozessors / Interpreters / Compilers für Javascript oder das Verwenden von Javascript selbst, um einen Prozessor / Interpreter / Compiler für eine andere Sprache zu schreiben, würde die Kriterien für die Zuweisung erfüllen. Das Schreiben eines Javascript- "Minifier", der den gesamten unnötigen Leerraum (für kleinere Dateigrößen) entfernt, während die Funktionalität des Programms beibehalten wird, ist ein anderes mögliches Projekt.
Hier ist etwas, was ich lieben würde: ein PHP-basierter LaTeX-zu-MathML-Übersetzer. Es würde nicht alles machen müssen, aber wenn ich mathematische Formeln, die in gültigen LaTeX-Code geschrieben sind, einfach in ein Fenster schneiden und einfügen und das Skript analysieren und in gültiges MathML konvertieren könnte, wäre das großartig. p>
Lassen Sie mich noch etwas weiter ausführen. Der aktuelle Stand der wissenschaftlichen Veröffentlichung im Internet ist nicht groß. Titel, Kopfzeilen, Abschnittsnummern, Tabellen usw. können alle in HTML erstellt werden, aber für mathematische und chemische Formeln, die auf präzise zweidimensionale Formatierung angewiesen sind, haben wissenschaftliche Autoren nur zweitrangige Optionen:
Außerdem erlaubt keine dieser Optionen, dass mathematische Formeln programmatisch generiert werden, was für die Bildungsgemeinschaft hilfreich wäre (denken Sie an zufällig generierte Online-Hausaufgaben).
Die Veröffentlichung von wissenschaftlichen Arbeiten in MathML würde all diese Probleme lösen, aber es hat einige eigene Probleme, nämlich:
Mit anderen Worten: wissenschaftliche Autoren kennen LaTeX, sie benutzen es täglich, es ist der De-facto-Standard für die Erstellung wissenschaftlicher Inhalte. MathML ist und wird nicht immer die Art und Weise sein, wie Mathematik und Naturwissenschaften verfasst werden, aber es ist die einzige semantisch reiche Art, Hypertext-Mathematik ins Internet zu stellen. Die Browserunterstützung für MathML ist schwach, da niemand sie verwendet; niemand benutzt es, weil es zu schwer ist, mit der Hand zu schreiben. Nun, vielleicht ist das ein Wunschdenken, aber ich muss glauben, dass, wenn es einfacher wäre, MathML zu schreiben, mehr Wissenschaftler und Mathematiker, besonders die Early-Adopter-Typen, es zumindest versuchen würden, und dies würde Browser inspirieren Quellbrowser), um ihre Unterstützung zu verbessern, was dann zu mehr Autoren führen würde, die es benutzen, usw.
Hier kommt der Übersetzer ins Spiel: Bis die Barrier-to-entry für MathML fällt, wird sie nie weit verbreitet sein. Ein einfacher LaTeX-zu-MathML-Konverter würde dafür sorgen. Es würde die Eintrittsbarriere für MathML auf nahezu Null reduzieren. Wenn es zu einer weit verbreiteten Verwendung und besseren Unterstützung von MathML führt, wäre dies ein großer Vorteil für die Wissenschafts- und Bildungsgemeinschaften.
Sie sollten das Erstellen einer Implementierung einer bestimmten Sprache nicht als unbedeutend ansehen. Jeder möchte wahrscheinlich ein berühmter Programmierer sein und nicht viele Menschen erreichen es. Dies ist eine großartige Gelegenheit, um mit sehr coolen ungewöhnlichen Sprachen vertraut zu sein. (Lisp, APL, etc) Wenn Sie zum ersten Mal einen Compiler / Interpreter erstellen, ist es auch eine bessere Wahl, mit einer bereits existierenden Sprache zu arbeiten (damit Sie sehen können, welche Designelemente für eine erfolgreiche Sprache benötigt werden.)
Wesentliche Ideen entstehen typischerweise aus der Notwendigkeit. Die Leute begannen, eine Sprache zu benutzen, weil sie sie entweder brauchten oder es viel einfacher war, die Aufgabe zu erfüllen, die sie machen wollten. Ich glaube nicht, dass Sie hier die Antwort oder die Motivation finden, ein Projekt von vorne anzufangen. Davon abgesehen habe ich immer gedacht, dass es cool wäre, eine Sprache zu haben, die den nativen Byte-Code des Prozessors benutzt, um dynamische Webseiten zu erstellen (ohne etwas wie cgi zu benutzen).
Als Antwort auf Ihre Bearbeitung, hier sind einige Latex Ideen:
det = (b*b - 4*a*c); det_sqrt = sqrt(det); etc
" Wie wäre es mit etwas, das C (oder Java oder was auch immer) Code nimmt, der eine Reihe von arithmetischen Zuweisungen durchführt und es in ein schön formatiertes Latex umwandelt Liste von Gleichungen, die für Menschen lesbar sind (dh ein \begin{eqnarray}
-Block) Etwas, das interessant sein kann, um zu arbeiten, ist ein Regexp zu Automaten, der den Algorithmus von Glouchkov verwendet, hier sind einige Schlüsselmerkmale, die implementiert werden können
Das ist keine sehr lange Aufgabe, so dass Sie vielleicht in ein paar Monaten damit fertig werden können
Sie können versuchen, eine Skriptsprache in der Art von nadvsh zu erstellen, wenn Sie etwas Interessantes tun möchten, aber es ist vielleicht zu weit entfernt von dem, was Ihr Lehrer von Ihnen erwartet.
Wenn Sie die Sprache bearbeiten möchten, können Sie ein UIMA-Programm erstellen. UIMA steht für Unstructured Information Management Architecture, wurde von IBM zu einem Preis von etwa 45 Millionen Dollar entwickelt und ist nun als OpenSource verfügbar. Im Grunde genommen sind UIMA ASCII-Codecs, um Textdokumente zu analysieren, um Muster zu finden. Es wird gemacht, Dinge zu finden, wo es keine Ordnung gibt (Nadeln in Heustapeln finden). Es verwendet XML und C.
Das Internet ist ein reichhaltiger Bereich für die Arbeit mit Sprachen. Sehen Sie sich ein beliebtes Web-Framework wie Ruby on Rails an, und Sie werden feststellen, dass ein Großteil seiner Produktivität von der Tatsache herrührt, dass es ein domänenspezifische Sprache gut geeignet für Webanwendungen. Ruby ist gerade wegen seiner dynamischen Natur eine gute Sprache, um eine solche Sprache zu implementieren, aber die Kraft kommt von der Sprache, die sie daraus geschaffen haben.
In Ihrem Fall könnten Sie vielleicht versuchen, Ihre eigene domänenspezifische Sprache mit einer Ihnen vertrauten Sprache wie PHP zu erstellen, um den essentiellen Kern eines Web-Frameworks zu implementieren:
Wenn Sie wirklich ehrgeizig sind, können Sie, statt aus einer bestehenden Sprache zu bauen, Ihre eigene Sprache von Grund auf erstellen (Lexer, Parser, Codegenerator usw.), um dies zu tun.
Schreiben Compiler für C oder Pascal wird wahrscheinlich Monate oder Jahre dauern, wenn Sie nicht Compiler Guru sind.
Schreiben Sie einen einfachen Webserver. Es wird Spaß machen und sich als eine einfache und kostenlose Lösung als nützlich erweisen. Ich traf einmal einen Typen, der sagte, er habe so etwas gemacht und für einfache Kundenseiten verwendet. Ihr könnte auch eine nützliche Sache werden.
Tags und Links parsing php xml computer-science compiler-construction