Ich verstehe den Unterschied zwischen Syntax und Semantik -
Syntax : wie die Symbole zu einem gültigen Ausdruck oder einer gültigen Anweisung kombiniert werden.
Semantik : Die Bedeutung der Symbole, die einen Ausdruck oder eine Aussage bilden.
Aber was ist die Grammatik? Zum Beispiel: Manchmal höre ich Leute sagen, dass ein Konstrukt "grammatikalisch falsch, syntaktisch aber richtig" ist. Was bedeutet es?
int;
ist grammatikalisch gültig, aber syntaktisch falsch in C ++. Die Grammatik hat kein Problem mit diesem Code, aber Syntaxbeschränkungen erfordern, dass ein Name angegeben wird, wenn der erste Teil einer Deklaration keinen Klassenspezifizierer oder Aufzählungsspezifizierer oder in C ++ 11 einen Freundespezifizierer enthält .Antworten:
Eine Grammatik ist eine Reihe von Regeln, die die Syntax für eine bestimmte Sprache definieren.
Wenn Leute speziell über einen Parser sprechen (insbesondere über einen Parser, der mit einem Parsergenerator wie yacc, Byacc, ANTLR usw. generiert wurde), können sie etwas mehr Haarspalterei betreiben und speziell über die syntaktischen Regeln sprechen, die mit Hilfe des Generators codiert werden Regeln im Vergleich zu den Teilen, die separat durch Code erzwungen werden, der an eine Regel angehängt ist. Wenn Sie beispielsweise in C ein Array definieren, muss die Größe, die Sie für das Array angeben, streng positiv sein (nicht null). Die Grammatikregel könnte im Grunde etwa so lauten:
... und dann gibt es separat ein bisschen Code, um zu überprüfen, ob das unsigned_int nicht Null ist. In diesem Fall könnte es sinnvoll sein, die Anforderungen der Syntax und der Grammatik getrennt voneinander zu besprechen, wobei die beiden leicht unterschiedliche Anforderungen haben (die zusammen erzwungen werden, setzen voraus, dass sie den Anforderungen der Sprache selbst entsprechen).
quelle
Der Unterschied ist unscharf und es lohnt sich nicht, sich zu viele Sorgen zu machen.
Menschen werden manchmal kontextsensitive Einschränkungen unter dem Dach der syntaktischen Korrektheit einbeziehen. Das häufigste Beispiel ist ein Typensystem. Ein weiterer Grund ist Javas Regel "Keine Anweisungen nach Rückgabe". Dies vereinfacht die formale Diskussion: Die Syntax ergibt eine Sprache (eine Menge von Sätzen / Ausdrücken / Programmen), die der Bereich der Semantik ist; alles andere ist "kein Programm", und die Semantik braucht sich nicht darum zu kümmern.
Im Gegensatz dazu bezieht sich "Grammatik" typischerweise auf ein Verfahren zum Beschreiben von kontextfreien Sprachen (ungeachtet von Attributgrammatiken).
Der Grund, warum man sich nicht viele Sorgen machen sollte, ist, dass Typsysteme ebenso oft als "statische Semantik " einer Sprache angesehen werden wie als " syntaktische Disziplin für Korrektheit". Und manchmal hat eine Sprache keine richtige kontextfreie Grammatik. C muss beispielsweise Informationen aus dem Parser zurück in den Lexer übertragen.
Pragmatisch sollte jeder, der sich auf eine Unterscheidung zwischen "syntaktisch" und "grammatisch" stützt, dies sagen und erklären, was sie bedeuten.
quelle
Eine Grammatik ist ein Regelwerk zur Definition einer Sprache. Vielmehr beschreibt die Grammatik die Syntax und Semantik . Eine Sprache kann zwei verschiedene Grammatiken haben:
Zum Beispiel könnte ein Teil der Grammatik in C ungefähr so aussehen:
Bedeutung:
Schauen Sie sich diese Art der Definition einer Grammatik an . Wenn Sie wirklich neugierig auf Grammatiken sind, werfen Sie einen Blick auf GNU Bison , ein Werkzeug zur Beschreibung der Grammatik einer Sprache.
Das "grammatisch falsche, aber syntaktisch korrekte" macht nicht allzu viel Sinn. Vielleicht beziehen sie sich auf eine Grammatik, die die Semantik einer Sprache beschreibt. Es wäre sicherlich sinnvoller, nur "nicht semantisch korrekt" zu sagen.
quelle