Is C++ context-free or context-sensitive?

Często słyszę roszczenia, że ​​C ++ jest językiem kontekstowym. Weź następujący przykład:

a b(c);

Czy jest to definicja zmiennej lub deklaracja funkcji? To zależy od znaczenia symboluc. Jeślic jestzmienna, następniea b(c); definiuje zmienną o nazwieb typua. Jest bezpośrednio inicjowany za pomocąc. Ale jeślic jestrodzaj, następniea b(c); deklaruje nazwę funkcjib to trwac i zwracaa.

Jeśli spojrzysz na definicję języków bezkontekstowych, to w zasadzie powiedzą ci, że wszystkie reguły gramatyczne muszą mieć lewostronne boki, które składają się z dokładnie jednego nie-końcowego symbolu. Z drugiej strony gramatyki kontekstowe pozwalają na dowolne ciągi symboli terminala i symboli nieterminalnych po lewej stronie.

Przeglądając Dodatek A do „Języka programowania C ++”, nie mogłem znaleźć ani jednej reguły gramatycznej, która miałaby coś innego niż pojedynczy symbol nie-końcowy po lewej stronie. Oznaczałoby to, że C ++ jest bezkontekstowy. (Oczywiście, każdy język bezkontekstowy jest także wrażliwy na kontekst w tym sensie, że języki bezkontekstowe tworzą podzbiór języków wrażliwych na kontekst, ale to nie o to chodzi).

Czy więc C ++ jest kontekstowy czy kontekstowy?

questionAnswers(19)

yourAnswerToTheQuestion