Являются ли грамматики современных языков программирования контекстно-зависимыми или контекстно-зависимыми? - PullRequest
9 голосов
/ 11 марта 2012

Являются ли языки C ++, C # или Java контекстно-зависимыми или контекстно-зависимыми?

1 Ответ

6 голосов
/ 11 марта 2012

C ++ не является ни контекстно-зависимым, ни контекстно-зависимым, поскольку система шаблонов полна по Тьюрингу , и определить, является ли фрагмент кода C ++ допустимым C ++, неразрешимо сложно. Например, я мог бы определить шаблонный класс, который имитирует TM для строки, а затем создает константу со значением 1, если машина принимает, и 0, если нет. Если бы я это сделал, то следующий код был бы допустимым, если бы ТМ остановился на данном входе:

int myArray[TMTemplate</* ... args ... */>::value];

Так как, если TM отклоняет, это создает массив размера 0, что недопустимо.

Ни C #, ни Java не являются контекстно-независимыми, поскольку известно, что проверка правильности и согласованности использования переменной во всей конкретной области видимости не является контекстно-зависимой (доказательство является сложным и основано на Лемма Огдена ). Однако я не уверен, являются ли они контекстно-зависимыми.

Надеюсь, что это дает частичный ответ на ваши вопросы!

...