Другими словами, язык, где каждая возможная строка имеет правильный синтаксис?
РЕДАКТИРОВАТЬ : Это теоретический вопрос.
Я не заинтересован в использовании такого языка; Я просто спрашиваю, возможно ли это.
Дальнейшее редактирование
Я разработал такой язык. Смотрите ErrorFree
language-design
syntax
SLaks
источник
источник
instruction operand*
, где операндом может быть регистр или число в диапазоне 0-127 (и все, что выше, рассматривается как регистр) и если операнд отсутствует для многоартериальной инструкции, предполагается «0».Ответы:
Да, если вы посмотрите на это очень аналитически, создав Детерминированную Машину Тьюринга, которая всегда останавливается в хорошем конечном состоянии для каждой отдельной строки определенного языка, то вы продемонстрировали, что это возможно. Демострация довольно проста: вам нужна обычная TM с функцией перехода только с одним переходом, который выглядит следующим образом:
Было доказано, что ТМ обладает той же вычислительной мощностью, что и любой другой реальный компьютер, поэтому это абсолютно возможно.
источник
Да, конечно, это возможно, это даже тривиально легко.
Я не понимаю, как кто-то может сказать «нет». Тем не менее, может быть довольно сложно определить значимую семантику для такого языка, но это также возможно. Просто посмотрите на пробелы .
источник
Я думаю, это зависит от того, что вы подразумеваете под действительным синтаксисом.
Вы можете разработать язык, который принимает любую строку, но игнорирует все, для чего не было задано конкретное значение. Это в основном эквивалентно высказыванию «Я избавлюсь от синтаксических ошибок, но говорю, что они не являются ошибками» - довольно бессмысленно и крайне нежелательно по многим причинам.
Кроме того, единственный способ, которым вы могли бы иметь язык, в котором не было бы синтаксических ошибок, состоял бы в том, чтобы с каждой возможной строкой была связана действительная инструкция / использование. Единственный способ, которым я могу это сделать, - это иметь все операции как отдельные символы и гарантировать, что каждому отдельному символу была назначена операция.
С этим миллионы вещей не так - очевидно, что нет никаких зарезервированных слов, все зависит от того, где оно используется в контексте, и в результате это будет в основном неразборчиво и, в то время как иммунитет от синтаксических ошибок будет гораздо более вероятным, чем другие ошибки.
Так что теоретически возможно (AmmoQ выражает это гораздо более аккуратно, чем я), но совершенно нежелательно.
источник
Код на нетекстовом языке программирования может не иметь синтаксических ошибок.
Я думаю о визуальном языке, как BYOB . Вы не можете случайно ввести «if x ten else foo», потому что «синтаксис» определяется графическими блоками.
источник
Самой целью синтаксиса является различие между допустимым и недействительным способом, который быстрее и эффективнее, чем выполнение кода. Синтаксис - это просто оптимизация, что входит в него и что входит в семантику, является произвольным.
Обычно вам требуется совсем противоположное: максимально расширить синтаксис, чтобы сэкономить больше времени, но, конечно, вы можете вообще исключить синтаксис и объявить каждую ошибку семантической: в итоге вы получите не токенизирующий интерпретатор.
источник
Так что это значит?
Пока язык имеет структуру и грамматику, всегда будет концепция синтаксической ошибки. Вопрос в том, соблюдаешь ли ты это или нет. Люди будут делать ошибки, а синтаксические ошибки - это то, к чему стремятся большинство разработчиков языков, чтобы помочь программистам избежать глупых ошибок.
Невозможно избавиться от синтаксических ошибок на основе приведенного выше определения. Мы все неправильно определили идентификаторы, мы все неправильно назвали имена методов. То, что язык молча принимает неправильное написание и радостно ничего не делает, не является моей идеей приятного опыта.
Можно разработать язык, который может использовать любой допустимый символ Юникода (или последовательность символов) в качестве идентификаторов. Существуют проблемы, такие как нормализация эквивалентных символов / последовательностей символов, чтобы они распознавались как одно и то же, но это возможно. ПРИМЕЧАНИЕ. Существует четыре стандартных типа нормализации юникода .
источник