Istnieje wiele popularnych języków. Ale informatycy mówią nam, że aby zrozumieć zachowanie programów w tych językach, zdecydowanie i jednoznacznie spieramy się na zachowanie programu (np. Udowodnić ich tożsamość), musimy przetłumaczyć je na inny, dobrze zrozumiały język. Nazywają taki język „semantyką”. Autorzy proponują jedną z wielu semantyki. Wyjaśniają znaczenie ich konstrukcji i sposób, w jaki możesz przetłumaczyć swój język na ich. Gdy to zrobisz, wszyscy zrozumieją twój program, mówią.
Wygląda dobrze, ale czegoś nie rozumiem. Czy mówią nam, że wprowadzają inny język, aby zrozumieć pierwszy? Dlaczego rozumiemy to lepiej niż oryginał? Dlaczego ta semantyka jest lepsza? Dlaczego nie od razu uczyć się semantyki języka C zamiast wymyślać inny język do opisu semantyki języka C? To samo dotyczy składni. Dlaczego nie zadam tego samego pytania dotyczącego składni?
PS W komentarzach słyszę, że semantyka nie oznacza innego języka lub tłumaczenia na ten język. Ale Formalna semantyka dla VHDL mówi, że jeśli rozumiesz coś tylko w jeden sposób, to nie rozumiesz tego, a „znaczenie znaczenia” można określić, jeśli dostarczymy język z mechanizmem, który tłumaczy to na inny (znany) język. Oznacza to, że „semantyka jest relacją między systemami formalnymi”. Hennessy w Semantics of Programming Languages mówi, że semantyka pozwala na formalne przetwarzanie „znaczenia” programu, gdy semantyka jest dostarczana jako BNF lub diagram składniowy. Co to jest system formalny, jeśli nie język?
PS2 Czy mogę powiedzieć, że synteza HW danego programu HDL do połączenia bramek jest procesem ekstrakcji semantyki? Następnie tłumaczymy (wysoki poziom) opis na język (niski poziom), który rozumiemy.
Odpowiedzi:
Ponieważ do zdefiniowania semantyki języka C potrzebujesz jakiegoś języka, na przykład angielskiego. Angielski może być dwuznaczny, a zwłaszcza semantyka C99.
Pojęcie semantyki w informatyce jest ogólnie matematycznym opisem programu, a opis ten nie jest dokładnym tłumaczeniem. Istnieje kilka rodzajów semantyki, które mogą dotyczyć różnych rzeczy:
Trochę niestety na razie uniwersalne zrozumienie programu poprzez jego semantykę nie jest ani łatwe, ani intencją tego wszystkiego. To nie jest ten pierwszy, ponieważ cóż, matematyka może być nieporządna. To nie jest to drugie, ponieważ semantyka rzeczywiście zapewnia wspólny i jednoznaczny opis, ale nie jest używana do zrozumienia programu.
Jeśli czytanie semantyki nie ma tak dużego znaczenia, czytanie i uzgadnianie semantyki w zakresie podstawowych elementów języka jest bardzo ważne, na przykład w celu jednoznacznego wyjaśnienia, w jaki sposób C jestprymitywne dzieła.continue
Podsumowując:
Technicznie nie, językiem jest matematyka. Jest również zasadniczo taki sam dla wszystkich języków programowania, więc nawet wprowadzenie nowego języka, jeśli jest taki sam dla wszystkich, byłoby prawie OK.
Ponieważ jest to matematyka, więc może być trudniejsza do zrozumienia, ale jest o wiele bardziej precyzyjna i kompletna.
Istnieją prace nad zweryfikowanymi analizatorami składni, ale pytanie, co oznaczałoby semantykę analizatora składni, nie jest trywialne.
źródło