编程语言中的术语“上下文”以及加载和更新如何影响上下文?

时间:2011-11-19 19:46:30

标签: c compiler-construction grammar context-free-grammar formal-semantics

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

2 个答案:

答案 0 :(得分:4)

一个上下文敏感的语法,制作具有一般形式

aBc -> ab'c

其中大写符号是非终端符号,小写符号是终端符号和非终端符号。

在上面的示例中,ab将是非终端B的上下文,并表示B可以“扩展”为{{1} }仅在被b'a包围时。

在上下文无关语法中,制作可能看起来像

c

即。 B -> b' “扩展”为B,无论周围是什么,换句话说,无论背景如何。

答案 1 :(得分: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_valuehiding函数。大多数语言,如C,都有变量定义的上下文,允许所谓的{变量:在块内定义的变量(}和{{1}}符号之间的区域)不是覆盖变量名称的先前定义,而是“隐藏”它们用于块的上下文。

从定义时刻到程序退出之前,有些语言不是上下文敏感的。用这些语言更新变量将在程序范围内更新其值。