Programmieren / Grammatik

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Programmieren / Grammatik

Beitrag von tryunderror »

Das ist eine theoretische Diskussion. Also ohne Praxisbezug zu Pascal oder zu Lazarus.

Gestern beim Lagerfeuer gab es Diskussion. Hier die Thesen, was ist falsch oder richtig. Es geht um theo. Informatik.


Pascal hat LL(1) Grammatik.

Prorammiersprachen sind kontextfrei oder kontextsensitiv beides geht nicht.

Alle höheren Programmiersprachen sind kontextfrei und damit LL(1).

Alle höheren Programmmiersprachen sind kontextsensitiv.

Assembler ist kontextsensitiv.

LL(1) Sprachen sind unbeliebt und unpraktisch.

Jeder Code in jeder Programmiersprache lässt sich per Hand übertragen in Code einer Prorammiersprache mit LL(1).

Danke fürs Lesen.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Programmieren / Grammatik

Beitrag von marcov »

tryunderror hat geschrieben:

Pascal hat LL(1) Grammatik.


Klassisch Standard Pascal ist LL(1) oder "fast" LL(1). (ich weiß nicht ob der dangling else workaround ganz LL(1) ist)

Prorammiersprachen sind kontextfrei oder kontextsensitiv beides geht nicht.


Stimmt denk ich.

Alle höheren Programmiersprachen sind kontextfrei und damit LL(1).


Unsinn.

Alle höheren Programmmiersprachen sind kontextsensitiv.


Parsen davon, nein denke ich. Semantik, natuerlich.

Assembler ist kontextsensitiv.


Es gibt kein universale Assembler, und fast jeder hat Erweiterungen. Mehr Kontext nötig.

LL(1) Sprachen sind unbeliebt und unpraktisch.


Die populärsten Sprachen der letzte Jahrzehnt sind fast alle sogenannte Curly Braces (C ähnlich), weil Manager denken das das auf Schulung spart.

Unpraktisch ist ganz Unsinn.

Jeder Code in jeder Programmiersprache lässt sich per Hand übertragen in Code einer Prorammiersprache mit LL(1).


2 Minuten suchen und http://stackoverflow.com/questions/3148 ... equivalent

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Programmieren / Grammatik

Beitrag von Patito »

Nunja. Ich denke mal kontextfreie Grammatiken für Programmiersprachen
sind eher etwas theoretisches.

Mal ein Beispiel:

Code: Alles auswählen

 
TTest = class(TObject)
public
  procedure Test;
  procedure Test;
end;
 


Sowas mag in irgendeiner Grammatik zwar korrekt sein. Compilieren tut es trotzdem nicht.
Normalerweise gibt es immer irgendwelche Regeln, die man beachten muss,
die man kontextfrei einfach nicht richtig greifen kann.

Ich habe mal die Grammatik, die in der Hilfe von Delphi dabei war angesehen. Es fängt gut an,
aber irgendwann wundert man sich was für seltsame Konstrukte grammatikalisch korrekt sein sollen.
Und am Ende hatte ich den Eindruck, dass derjenige, der das geschrieben hat einfach aufgegeben hat..

Ich denke mal für reale Programmiersprachen "gibt" es zwar irgendwelche kontextfreien Grammatiken,
mit denen man ein paar grobe Syntaxchecks machen kann, aber arg viel taugt das alles nicht.
Grammatikalisch korrekter Code ist meistens eine echte Obermenge von compilierbarem Code...

P.S: Kontextsensitiv würde ich als Obermenge von Kontextfrei definieren.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Programmieren / Grammatik

Beitrag von marcov »

Patito hat geschrieben:Sowas mag in irgendeiner Grammatik zwar korrekt sein. Compilieren tut es trotzdem nicht.


Grammatisch ist es korrekt, nur Semantisch nicht.

Aber es gibt Sprachen die wissen müssen ob etwas ein Typ oder ein Variabel ist um weiter Parsen zu können.

BeniBela
Beiträge: 308
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Programmieren / Grammatik

Beitrag von BeniBela »

tryunderror hat geschrieben:Prorammiersprachen sind kontextfrei oder kontextsensitiv beides geht nicht.



Jede kontextfreie Sprache ist nach Definition kontextsensitiv

tryunderror hat geschrieben:Alle höheren Programmmiersprachen sind kontextsensitiv.


Sprachen die nicht kontextsensitiv sind, dürften sich praktisch nicht parsen und kompiliern lassen

tryunderror hat geschrieben:Assembler ist kontextsensitiv.


Klassischer Assembler ohne Funktionen/Labels mit endlichen Registern dürfte sogar regulär sein.

Somit ist auch kontextfrei und kontextsensitiv.

tryunderror hat geschrieben:Jeder Code in jeder Programmiersprache lässt sich per Hand übertragen in Code einer Prorammiersprache mit LL(1).


Ja

Wenn man Assembler als Programmiersprache betrachtet, geht das sogar automatisch

tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Re: Programmieren / Grammatik

Beitrag von tryunderror »

Danke für viele Antworten und den Link.
Fragen:
LL(1) ist nicht dasselbe wie kontextfrei?
Pascal ist die einzige Programmiersprache mit LL(1)?
Java und C und c** und PHP haben definitiv keine LL(1) Grammatik?
Grammatik von Pascal also LL(1) ist nicht beliebt?
Warum sind C++ und PHP so beliebt? Wenn wir Programmierer fragen, dann sagen die, Chef will es so.

Gibt es Tabelle Internet welche Programmiersprache welche Struktur zb PHP Skriptsprache wird nicht compiliert kann aber auch compiliert werden ist auf Hompeages aktiv
Algol veraltet etc
Delphi ist GUI und mehr für Pascal. etc.

Kontextsensitiv bezog sich auf Parsen.
Amerkung : Wenn ich im Internet "kontextfrei" suchte, fand ich nur Übungsaufgaben von Unis.

Und noch provokative Frage:
Gibt es sichere und unsichere Programmiersprachen? JS dürfte doch unsicher sein?

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Programmieren / Grammatik

Beitrag von marcov »

tryunderror hat geschrieben:
Pascal ist die einzige Programmiersprache mit LL(1)?


Nein zb auch Modula2.

Java und C und c** und PHP haben definitiv keine LL(1) Grammatik?
Grammatik von Pascal also LL(1) ist nicht beliebt?


C* und Java sind ein und dieselbe, die sogenannte Curly Braces syntax, und damit liegt die grammatik als nicht LL(1) fest.

(Die Grammatik von) PHP kenne ich nicht echt gut.

Warum sind C++ und PHP so beliebt? Wenn wir Programmierer fragen, dann sagen die, Chef will es so.


Das ist der Grund worum Java und C# Curly Braces C Syntax haben. Es gibt ein merkwuerdiges Idee unter Manager das solch ein Grundsyntax dasselbe halten enorm Spart wenn man eine neue Sprache lernen muss.

Unsinn natürlich in einem zeit wo Sprache gar nicht die meisten Trainungszeit kostet, aber Bibliotheken und algemeine Know-how.

Amerkung : Wenn ich im Internet "kontextfrei" suchte, fand ich nur Übungsaufgaben von Unis.


Das ist immer so, und fuer mehr Dinge in der Kompilerwelt. Zb alle Unis nutzen Grammars und parsergeneratoren, aber Produktions C Kompiler nutzen recursive descent (also pseudo LL(1)) parser, auch fuer C/C++. Es ist nur so das es fuer Pascal einfach ist.

Grammatik und Kompiler Unterricht ist mehr gemeint für eine generelle Verständnis wie Kompiler funktionieren und kleine Tools erstellen, und nicht als Einleitung für professioneller Kompiler erstellung.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Programmieren / Grammatik

Beitrag von marcov »

tryunderror hat geschrieben: Gibt es sichere und unsichere Programmiersprachen? JS dürfte doch unsicher sein?


Die ganze Sichere/Unsichere Klassification ist veraltet und etwas für Unis. C# und Java heißen meistens in Prinzip Sicher zu sein, aber sind so Komplex das immer neue Bugs in VM und Bibliotheken gefunden werden (sie dich nur die Monatliche Windows (und .NET!) updates)

tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Re: Programmieren / Grammatik

Beitrag von tryunderror »

Noch ein paar Fragen:
Compilerbau ist einfacher für LL(1) als für JAVA oder c++?
Warum setzen sich =Pascal und Delphi nicht durch? Mit Delphi und Pascal sind doch alle denkbaren Sachen programmierbar auch in jedem BS oder nicht?

tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Re: Programmieren / Grammatik

Beitrag von tryunderror »

Zusatzfragen:
Warum ist Pascal so unbeliebt? Hoffentlich ist die Frage in einem Pascal Forum erlaubt.
Pascal ist doch prima und einfach und sicher und alles ist machbar. Und es gibt mehr als eine GUI also Delphi.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Programmieren / Grammatik

Beitrag von theo »

tryunderror hat geschrieben:Warum ist Pascal so unbeliebt?

Pascal ist nicht unbeliebt. Ich glaube Java und C++ sind viel unbeliebter.
Pascal ist aber nicht (mehr) so stark verbreitet. Das hat versch. Gründe. Einer davon ist bestimmt, dass die wesentlichen Betriebssysteme in C geschrieben sind.
Und Java ist halt nicht "nur" eine Sprache und hat deshalb andere Vorteile.

BeniBela
Beiträge: 308
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Programmieren / Grammatik

Beitrag von BeniBela »

tryunderror hat geschrieben:Zusatzfragen:
Warum ist Pascal so unbeliebt? Hoffentlich ist die Frage in einem Pascal Forum erlaubt.
Pascal ist doch prima und einfach und sicher und alles ist machbar. Und es gibt mehr als eine GUI also Delphi.


Weil die meisten Leute es nur noch von Turbo Pascal kennen. Und weil Delphi zu teuer geworden ist

Und weil es keine Block-Scope-Variablen gibt

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Programmieren / Grammatik

Beitrag von Christian »

Ich weiss nicht wie man darauf kommt :)
Wenn man sich den aktuellen TIOBE Index anschaut
http://www.tiobe.com/index.php/content/ ... index.html

und Pascal und Object Pascal zusammenrechnet (die Trennung macht aus meiner Sicht wenig sinn)
landet man zwichen Python und PHP was ich auch für relativ realistisch halte.
Btw muss man dann auch die Basics zusammenziehn passt aber auch da in den Firmen oft noch Visual Basic oder die .NET Variante davon eingesetzt wird.

C hat seine Polularität da sämtliche Embedded Devices in C Programmiert werden was dort auch Sinn macht.
Die Popularität von Java versteh ich bis heut nicht ist aber warscheinlich ein selbstverstärkender Effekt java Programmierer werden meisst gesucht weil Java die häufigst verwendete Sprache ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

tryunderror
Beiträge: 57
Registriert: Di 9. Okt 2012, 17:32

Re: Programmieren / Grammatik

Beitrag von tryunderror »

Wie wird in der Praxis ein Programm aufgehackt? goto Befehle im Maschinencode manipulieren?

Eure Diskussion geht ja am Thema vorbei. Denn wenn der Auftraggeber C++ will, dann ist es egal, ob Pascal besser ist.
Was geht denn nicht mit Pascal? Ist doch nur Frage vom Aufwand?
Und nochmal: Ist nicht Pascal sicherer weil restriktiver in der Sprachstruktur?

Antworten