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

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

a b(c);

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

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

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

Так, C ++ контекстно-зависимый или контекстно-зависимый?

Ответы на вопрос(19)

Ваш ответ на вопрос