co to jest semantyka?

13

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.

Val
źródło
Jakie masz na myśli diagramy? Pracuję z semantyką, ale praktycznie nigdy nie używam diagramów.
Dave Clarke,
1
Nie nazwałbym semantyki „językiem”. Semantyka definiuje znaczenie języków. Na przykład składnia liczb binarnych to . Tylko przy wartości semantyki ( w ) = | w | i = 1 w i 2 n - i + 1 otrzymujemy liczby rzeczywiste; zauważ, że nie jest to jedyna możliwa semantyka, są też BCD, 2-dopełniacz i wiele innych. {0,1}+value(w)=i=1|w|wi2ni+1
Raphael
@Dave Przepraszam, stworzyłem moje pytanie pod wrażeniem diagramów decyzji o przypisaniu. Ja także po prostu Formalna semantyka dla VHDL, książki, w której autorzy proponują inną semantykę, z dużą ilością diagramów w każdym. Myślałem, że to jest język, na który mapujemy.
Val
Brzmi to znacznie mniej jak semantyka, a bardziej pośredni krok na drodze do kompilacji na sprzęt.
Dave Clarke
Tak, ale wydobywają „znaczenie” z opisu.
Val

Odpowiedzi:

15

Dlaczego nie od razu uczyć się semantyki języka C zamiast wymyślać inny język do opisu semantyki języka C?

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:

  1. o tym, jaką funkcję matematyczną oblicza program ( semantyka denotacyjna ),
    lambda x: x + x =(x2x)
  2. o właściwościach, które będą przechowywane przed i po programie ( semantyka aksjomatyczna ),
    {a>0} x = a; y = 0; while(1 < x){ x = x/2; y++; } {y=log(a)}
  3. o tym, jak program się zmniejszy ( semantyka operacyjna ). gdzie reprezentuje twoją pamięć przed i po. W tym przypadku i jeśli i są komórkami pamięci oi, a jeśli .σ , σσ = ( x a , y b ) σ = ( x a + b , y 0 ) x y x y
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

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:

Czy mówią nam, że wprowadzają inny język, aby zrozumieć pierwszy?

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.

Dlaczego rozumiemy to lepiej niż oryginał?

Ponieważ jest to matematyka, więc może być trudniejsza do zrozumienia, ale jest o wiele bardziej precyzyjna i kompletna.

To samo dotyczy składni.

Istnieją prace nad zweryfikowanymi analizatorami składni, ale pytanie, co oznaczałoby semantykę analizatora składni, nie jest trywialne.

jmad
źródło
2
„Matematyka [...] jest znacznie bardziej precyzyjna i kompletna”. - co oczywiście nasuwa pytanie o formalną składnię i semantykę samej matematyki. ;)
Raphael