Зачем языку программирования нужны ключевые слова? - PullRequest
32 голосов
/ 16 марта 2010

Например (в С):

int break = 1;
int for = 2;

Почему у компилятора вообще возникнут проблемы с выводом, что break и for являются переменными здесь?


Итак, нам нужны ключевые слова, потому что

  • мы хотим, чтобы программы были читабельными
  • мы не хотим чрезмерно усложнять работу современных сложных компиляторов
  • но самое главное, язык намного мощнее, если некоторые ключевые слова зарезервированы для некоторых специальных действий. Тогда язык может думать, что он полезен на более высоком уровне, а не умирает при попытке однозначно реализовать цикл for.

Ответы [ 13 ]

0 голосов
/ 19 марта 2010

FWIW, Tcl не имеет зарезервированных слов. У вас могут быть переменные и функции с именами if, break и т. Д. Интерпретация токена полностью зависит от контекста. Один и тот же токен может представлять команду в одном контексте, переменную в другом или буквенную строку в другом.

0 голосов
/ 19 марта 2010

В зависимости от определения языка компилятору могут понадобиться или не потребоваться ключевые слова. Когда он не знает, что делать, он может попытаться применить правила приоритета или просто потерпеть неудачу.
Пример:

void return(int i){printf("%d",i);}
public int foo(int a)
{
  if(a > 2)return (a+1)*2;
  return a + 3;
}

Что произойдет, если а больше 2?

  • Спецификация языка может требует, чтобы компилятор не работал
  • Спецификация языка может потребовать, чтобы компилятор использовал return функция
  • Спецификация языка может потребовать от компилятора возврата

Вы можете определить язык, в котором не используются ключевые слова. Вы даже можете определить язык, который позволяет вам заменять все символы (поскольку они сами являются только очень короткими ключевыми словами).
Проблема не в компиляторе, если ваша спецификация завершена и без ошибок она будет работать. Проблема в PEBCAD, программы, использующие эту функцию языка, будут трудно читать, так как вы должны отслеживать определения символов.

0 голосов
/ 16 марта 2010

Я думаю, это выглядит очень странно, если не невозможно написать парсер. * 1001 например *

int break = 1;
while (true) {
   // code to change break
   if (!break) break;   // not very readable code.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...