С контекстно-свободной++ или контекстная?



я часто слышу утверждения, что C++ является контекстно-зависимым языком. Возьмем следующий пример:



a b(c);


это определение переменной или объявление функции? Это зависит от значения символа c. Если c это переменная, потом a b(c); задает переменную b типа a. Он непосредственно инициализируется с помощью c. Но если c это тип, потом a b(c); объявляет функцию с именем b что берет а c и возвращает a.



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



просматривая приложение A "языка программирования C++", я не мог найти ни одного правила грамматики, которое имело все остальное, кроме одного нетерминального символа на его левой стороне. Это означало бы, что C++ является контекстно-свободной. (Конечно, каждый контекстно-свободный язык также является контекстно-зависимым в том смысле, что контекстно-свободные языки образуют подмножество контекстно-зависимых языков, но дело не в этом.)



Итак, с контекстно-свободной++ или контекстная?

622   0  

Comments

    Ничего не найдено.