C “一词”;上下文“;在编程语言中,加载和更新如何影响上下文?

C “一词”;上下文“;在编程语言中,加载和更新如何影响上下文?,c,compiler-construction,grammar,context-free-grammar,formal-languages,C,Compiler Construction,Grammar,Context Free Grammar,Formal Languages,在上下文无关和上下文敏感的语言中,上下文是什么意思?一个变量可以有多个上下文吗?如果我需要在特定的内存地址中存储特定的值,那么如何影响内存地址的上下文?如果我想更新一个变量,变量的上下文是如何变化的?请考虑以下C程序: #include <stdio.h> unsigned int my_value = 0; void print_value(void) { printf("My value: %d\n", my_value); } int main(void) {

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

请考虑以下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_value
链接到
main
函数中定义的
my_value
print_value
函数中定义的全局变量。大多数语言,如C,都有变量定义的上下文,允许变量的
隐藏
:在块内部定义的变量(
{
}
符号之间的区域)不会覆盖变量名的先前定义,而是在块的上下文中“隐藏”它们


有些语言是不区分上下文的,从定义开始到程序退出都有名称。用这些语言更新变量将在程序范围内更新其值。

考虑以下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_value
链接到
main
函数中定义的
my_value
print_value
函数中定义的全局变量。大多数语言,如C,都有变量定义的上下文,允许变量的
隐藏
:在块内部定义的变量(
{
}
符号之间的区域)不会覆盖变量名的先前定义,而是在块的上下文中“隐藏”它们


有些语言是不区分上下文的,从定义开始到程序退出都有名称。用这些语言更新变量将在程序范围内更新其值。

作为上下文敏感语法,产品具有一般形式

aBc -> ab'c
其中,大写符号为非端子,小写符号为端子和非端子序列

在上面的示例中,
a
b
将是非终端
b
的上下文,并且指示
b
仅当被
a
c
包围时才可以“扩展”到
b'

在上下文无关语法中,产品可能如下所示

B -> b'

i、 e.
B
“扩展”到
B'
,不管它周围有什么,换句话说,不管上下文。

上下文敏感语法,产品具有一般形式

aBc -> ab'c
其中,大写符号为非端子,小写符号为端子和非端子序列

在上面的示例中,
a
b
将是非终端
b
的上下文,并且指示
b
仅当被
a
c
包围时才可以“扩展”到
b'

在上下文无关语法中,产品可能如下所示

B -> b'

i、 e.
B
“扩展”到
B'
,不管它周围有什么,换句话说,不管上下文。

我想你指的是同一个词的不同含义。如果没有更多的上下文(没有双关语的意思),你就不可能回答你。在解析上下文中,“上下文无关”和“上下文敏感”可能指语法。解析阶段没有内存地址。我想您指的是同一个单词的不同含义。如果没有更多的上下文(没有双关语的意思),你就不可能回答你。在解析上下文中,“上下文无关”和“上下文敏感”可能指语法。解析阶段没有内存地址。