Мне сегодня пришло в голову, что, хотя я принял и нечасто не использую термин "семантика" при обращении к элементам языка и соглашениям о присвоении имен, у меня нет смысла формального определения.
Моя попытка найти формальное определение в домене программирования заставила мои глаза потускнеть.
У меня есть смысл его значения от контекстов, в которых я встретился с ним, и от его более общего использования относительно лингвистики, и я обычно использую термин для обращения к значению или выразительности элемента языка или точности номенклатуры к намерению, поведению или функции того, что он называет.
Этим определением, тем не менее, является моя собственная идея. Я был главной Антропологией/Английским языком и никогда не брал курс Информатики. Это преподается в CS?
Существует ли более точное определение, которое может быть сведено к оператору или два, а не исчерпывающая и исчерпывающая статья?
Определение, заимствованное из , здесь : Семантика языка программирования описывает взаимосвязь между синтаксисом и моделью вычислений. . Это в значительной степени именно то, что было вашим предполагаемым определением. Камень преткновения, и то, что заставило ваши глаза потускнеть, является точным определением модели вычислений.
Существует множество различных формальных моделей вычислений, каждая из которых приводит к разной форме семантики. Операционная семантика, вероятно, наиболее близка к способу, которым большинство людей неформально моделирует семантику, когда каждый фрагмент кода проходит через интерпретатор и изменяет состояние абстрактной процедуры. Этот подход не работает во многих моделях с параллелизмом или недетерминизмом и т. Д., Поэтому есть другие сематики, лучше подходящие для этих ситуаций.
С точки зрения теории и практики языков программирования, языковые элементы обладают семантикой. Соглашения об именах - нет. И семантика не имеет ничего общего с «верностью» чему-либо, за исключением, возможно, того, что, если реализация верна, ее иногда называют «верной семантике».
Помимо этого, трудно обобщить, потому что существует так много разных стилей семантики. .
Существуют и другие стили семантики, называемые «операционная семантика», где для данной программы семантика сообщает вам, как эта программа будет выполняться на абстрактной машине (или, в другом варианте, семантика говорит не о том, как программа будет выполняется, но только каков будет результат).
Существует «аксиоматическая семантика», которая примерно определяет, какие факты вы можете доказать об отдельных программах. Аксиоматическая семантика - это набор действенных методов доказательства. Это зависит от реализации, чтобы убедиться, что все доказуемые утверждения верны.
Существует также «статическая семантика», под которой в широком смысле понимаются любые требования, предъявляемые во время компиляции для того, чтобы программа считалась «хорошей» или «правильно сформированной». Такие вещи, как «переменные должны быть определены перед использованием» - это статическая семантика. Но чаще всего, когда говорят о статической семантике, они имеют в виду проверку типов.
Наконец, можно говорить, среди прочего, о «семантике» абстрактного типа данных, класса или интерфейса. Это использование намного более свободно, но оно сводится к спецификации допустимого поведения. Я советую вам избегать слова «семантика» в этом контексте и использовать вместо него слово «контракт» или «спецификация». Это позволит избежать путаницы.
Комментарий: не всегда полезно сводить сложный предмет к одному или двум предложениям. А когда дело касается языков программирования, не нужно искать хорошую информацию в Википедии . Википедисты значат хорошо, но слишком часто они сложны, сбивают с толку или просто неверны.
Это значение языковых элементов в терминах того, что они формально означают в терминах вычислений (обычно это операционная семантика ). Это означает, что он выражает то, что фактически делает термин вашего языка, предполагая базовый тип модели, которая зависит от того, о какой семантике мы говорим.
Как вы можете видеть на странице википедии, у вас в основном три вида семантики:
+
: извлекает два элемента из стека и помещает сумму.Это НЕ формально, и это НЕ , как вы действительно должны это рассматривать, это просто для того, чтобы дать вам представление). Это наиболее часто используемый для описания семантики «нормальных» языков программирования. Например, для Java у вас может быть для каждого возможного термина последовательность инструкций JVM, предназначенных для выполнения для моделирования этого термина. Вероятно, когда вы спросили значение семантики , это именно то, что вы искали. +
, которая содержит семантику (эффективное значение) термина Из этого описания вы понимаете, что семантика - это что-то хорошее определены внутри контекста, и вам нужен конкретный контекст, иначе вы не сможете дать языку формальное определение того, что делают его термины.