что такое семантика?

13

Есть много популярных языков. Но компьютерные ученые говорят нам, что для того, чтобы точно понять поведение программ на этих языках и однозначно спорить с поведением программы (например, доказать их идентичность), нам нужно перевести их на другой, хорошо понятный язык. Они называют такой язык "семантикой". Авторы предлагают одну из многих семантик. Они объясняют смысл своих конструкций и как вы можете перевести свой язык на их. Как только вы это сделаете, все наверняка поймут вашу программу, говорят они.

Выглядит хорошо, пока я что-то не понимаю. Они говорят нам, что они вводят другой язык, чтобы понять первый? Почему мы понимаем это лучше, чем оригинал? Почему эта семантика лучше этой? Почему бы не изучить семантику C сразу же, а не изобретать другой язык для описания семантики C? То же самое относится и к синтаксису. Почему бы мне не задать тот же вопрос относительно синтаксиса?

PS В комментариях слышу, что семантика не означает другой язык или перевод на него. Но формальная семантика для VHDL говорит, что если вы понимаете что-то только одним способом, то вы не понимаете этого, и можно указать «значение смысла», если мы предоставим языку механизм, который переводит его на другой (известный) язык. То есть «семантика - это связь между формальными системами». Хеннесси в « Семантике языков программирования» говорит, что семантика позволяет формально обрабатывать «смысл» программы, когда семантика предоставляется в виде BNF или синтаксической диаграммы. Что такое формальная система, если не язык?

PS2 Могу ли я сказать, что синтез HW данной программы HDL во взаимосвязи ворот - это процесс извлечения семантики? Мы переводим (высокоуровневое) описание на (низкоуровневый) язык, который мы понимаем, впоследствии.

Val
источник
Какие диаграммы вы имеете в виду? Я работаю с семантикой, но практически никогда не использую диаграммы.
Дейв Кларк
1
Я бы не назвал семантику "языком". Семантика определяет значение языков. Например, синтаксис двоичных чисел это . Только со значением семантики ( w ) = {0,1}+получаем ли мы реальные числа; Обратите внимание, что это не единственная возможная семантика, есть также BCD, 2-дополнение и многое другое. значение(вес)знак равноΣязнак равно1|вес|веся2N-я+1
Рафаэль
@ Дэйв Извините, я создал свой вопрос под впечатлением от диаграмм принятия решений. Я также просто Формальная семантика для VHDL, книга, в которой авторы предлагают различные семантики, много диаграмм в каждой. Я думал, что это язык, на который мы наносим карту.
Val
Это звучит гораздо меньше как семантика, а больше как промежуточный шаг на пути к компиляции на аппаратном уровне.
Дэйв Кларк
Да, но они извлекают «значение» из описания.
Val

Ответы:

15

Почему бы не изучить семантику C сразу же, а не изобретать другой язык для описания семантики C?

Потому что для определения семантики C вам нужен какой-то язык, например английский. Английский может быть неоднозначным, особенно это касается семантики C99.

Понятие семантики в информатике - это, как правило, математическое описание программы, и это описание не совсем перевод. Существует несколько видов семантики, которые могут касаться разных вещей:

  1. о том, какую математическую функцию программа вычисляет ( денотационная семантика ),
    лямбда х: х + х знак равно(Икс2Икс)
  2. о свойствах, которые должны храниться до и после программы ( аксиоматическая семантика ),
    {a>0} х = а; у = 0; while (1 <x) {x = x / 2; у ++; } {Yзнак равножурнал(a)}
  3. о том, как программа будет сокращаться ( операционная семантика ). где представляет вашу память до и после. В этом случае и если и - ячейки памяти дляии если .σ , σσ = ( x a , y b )
    (σ, в то время как (х) {х -; у ++;})σ'
    σ,σ'σзнак равно(Иксa,Yб)σ'знак равно(Иксa+б,Y0)ИксYИксYa

Немного печально, но универсальное понимание программы через ее семантику не является ни легким, ни намерением всего этого. Это не первое, потому что математика может быть грязной. Это не последнее, потому что семантика действительно обеспечивает общее и однозначное описание, но она не используется для понимания программы.

Если чтение семантики не имеет особого смысла, очень важно прочитать и согласовать семантику по основным элементам языка, например, чтобы однозначно объяснить, как C'sПродолжитьпримитивные работы.

В заключение:

Они говорят нам, что они вводят другой язык, чтобы понять первый?

Технически нет, язык математический. Кроме того, это в основном одинаково для всех языков программирования, так что даже введение нового языка, если он одинаков для всех, было бы в значительной степени хорошо.

Почему мы понимаем это лучше, чем оригинал?

Потому что это математика, поэтому ее может быть сложнее понять, но она более точна и полна.

То же самое относится и к синтаксису.

Есть работы по проверенным парсерам, но вопрос о том, что означало бы семантику парсера, не тривиален.

jmad
источник
2
«математика [...] намного точнее и полнее». - что, конечно, ставит вопрос о формальном синтаксисе и семантике самой математики. ;)
Рафаэль