Rozumiem różnicę między składnią a semantyką -
Składnia : sposób łączenia symboli w celu utworzenia prawidłowego wyrażenia lub instrukcji.
Semantyka : znaczenie tych symboli, które tworzą wyrażenie lub wyrażenie.
Ale jaka jest gramatyka? Na przykład: czasami słyszę, jak ludzie mówią, że jakaś konstrukcja jest „niepoprawna gramatycznie, ale poprawna składniowo”. Co to znaczy?
int;
jest poprawny gramatycznie, ale źle sformułowany w C ++. Gramatyka nie ma problemu z tym kodem, ale ograniczenia składniowe wymagają podania nazwy, jeśli pierwsza część deklaracji nie zawiera specyfikatora klasy lub specyfikatora wyliczeniowego , a w C ++ 11 specyfikatora znajomego .Odpowiedzi:
Gramatyka to zestaw reguł, które definiują składnię dla określonego języka.
Kiedy ludzie mówią konkretnie o parserze (zwłaszcza generowanym za pomocą generatora parsera, takiego jak yacc, Byacc, ANTLR itp.), Mogą nieco rozdzielić włosy i mówić konkretnie o tych regułach składniowych, które są kodowane przy użyciu reguły, a te części, które są egzekwowane osobno przez kod dołączony do reguły. Na przykład w C podczas definiowania tablicy rozmiar określony dla tablicy musi być ściśle dodatni (nie zero). Reguła gramatyczna może w zasadzie powiedzieć coś takiego:
... a następnie osobno będzie trochę kodu, aby sprawdzić, czy unsigned_int był niezerowy. W tym przypadku, to mógłby zrobić jakiś sens mówić o wymagania składni i gramatyki niezależnie od siebie, przy czym dwa mające nieco inne wymogi (że egzekwowane wspólnie zakładają zmieścić wymagania samego języka).
źródło
Różnica jest rozmyta i nie warto się zbytnio martwić.
Ludzie czasami uwzględniają ograniczenia kontekstowe pod parasolem poprawności składniowej. Najczęstszym przykładem jest system typów. Kolejną jest zasada Java „brak instrukcji po powrocie”. Upraszcza to formalną dyskusję: składnia daje język (zestaw zdań / wyrażeń / programów), który jest domeną semantyki; wszystko inne nie jest „programem”, a semantyka nie musi się tym przejmować.
W przeciwieństwie do tego, „gramatyki” typowo odnosi się do sposobu opisania bezkontekstowych języki (gramatyk atrybutów mimo wszystko).
Powodem, dla którego nie warto się zbytnio martwić, jest to, że systemy typów są równie często uważane za „statyczną semantykę ” języka, jak są one „ dyscypliną syntaktyczną dla poprawności”. A czasem język nie ma odpowiedniej gramatyki bezkontekstowej; Na przykład C musi przekazać informacje z analizatora składni z powrotem do leksera.
Pragmatycznie każdy, kto opiera się na rozróżnieniu między „składniowym” i „gramatycznym”, powinien to powiedzieć i wyjaśnić, co mają na myśli.
źródło
Gramatyka to zestaw reguł definiujących język. Gramatyka opisuje raczej składnię i semantykę . Język może mieć dwie różne gramatyki:
Na przykład część gramatyki w C może wyglądać mniej więcej tak:
Znaczenie:
Spójrz na ten sposób definiowania gramatyki . Jeśli naprawdę interesujesz się gramatykami, spójrz na GNU Bison , który jest w zasadzie narzędziem do opisu gramatyki języka.
„Gramatycznie niepoprawne, ale poprawne składniowo” nie ma zbyt dużego sensu. Może odnoszą się do gramatyki opisującej semantykę języka. Jednak z pewnością bardziej sensowne byłoby po prostu powiedzenie „nie semantycznie poprawne”.
źródło