Термин «контекст» в языках программирования и как контекст влияет на загрузку и обновление? - PullRequest
0 голосов
/ 19 ноября 2011

Что означает термин контекст в контекстно-свободных и контекстно-зависимых языках?Может ли переменная иметь несколько контекстов?Если мне нужно сохранить определенное значение в определенном адресе памяти, как это влияет на контекст адреса памяти?И если я хочу обновить переменную, как меняется контекст переменной?

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Контекстно-зависимая грамматика, продукция имеет общий вид

aBc -> ab'c

, где символы в верхнем регистре не являются терминалами, а символы в нижнем регистре - это последовательности терминалов и нетерминалов.

В вышеприведенном примере a и b будут контекстом нетерминала B и означают, что B может "расширяться" до b' только в окружении a и c.

В не зависящей от контекста грамматике производство может выглядеть следующим образом:

B -> b'

т.е. B "расширяется" до b' независимо от того, что вокруг него, другими словами,независимо от контекста.

0 голосов
/ 20 ноября 2011

Рассмотрим следующую программу на C:

#include <stdio.h>

unsigned int my_value = 0;

void print_value(void)
{
    printf("My value: %d\n", my_value);
}

int main(void)
{
    int my_value = 5;
    printf("My main value: %d\n", my_value);
    print_value();
    return 0;
}

Эта программа напечатает:

My main value: 5
My Value: 0

Причина в том, что переменная my_value связана с переменной, определенной в *Функция 1008 * в контексте main и функция, определенная как глобальная переменная в контексте функции print_value.Большинство языков, таких как C, имеют контекст для своих определений переменных, допускающих то, что называется hiding переменных: переменная, определенная внутри блока (область между знаками { и }), не переопределяет предыдущие определения переменнойname, а скорее «скрывает» их для контекста блока.

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

...