0

在上下文无关和上下文相关的语言中,术语上下文是什么意思?一个变量可以有多个上下文吗?如果我需要将特定值存储在特定内存地址中,对内存地址的上下文有何影响?如果我想更新一个变量,变量的上下文如何变化?

4

2 回答 2

4

上下文相关的语法,产生式具有一般形式

aBc -> ab'c

其中大写符号是非终结符,小写符号是终结符和非终结符的序列。

在上面的示例中,aandb将是非终结符的上下文,B并表示只有在被and包围时才B可以“扩展”到。b'ac

在上下文无关语法中,产生式可能看起来像

B -> b'

B“扩展”到b'无论周围有什么,换句话说,无论上下文如何。

于 2011-11-20T13:20:48.437 回答
0

考虑以下 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与函数上下文中定义的变量相关联,并且与main函数上下文中main定义为全局变量的变量相关联print_value。大多数语言,如 C,都有其变量定义的上下文,允许所谓hiding的变量:在块内定义的变量({}符号之间的区域)不会覆盖变量名称的先前定义,而是“隐藏”它们以用于块的上下文。

有些语言从定义的那一刻起直到程序退出,名称就存在于上下文不敏感的语言中。在这些语言中更新变量将在程序范围内更新其值。

于 2011-11-19T20:06:47.917 回答