Ich weiß, dass C nicht eine kontextfreie Sprache ist, ein berühmtes Beispiel ist:Wie macht man die Sprache C kontextfrei?
int foo;
typedef int foo;
foo x;
In diesem Fall wird die Lexer nicht, ob foo
in der 3. Zeile nicht kennt, eine Kennung ist, oder typedef
.
Meine Frage ist, ist dies der einzige Grund, dass C eine Kontextsensitive Sprache macht?
Ich meine, wenn wir typedef
loswerden, würde es kontextfreie Sprache werden? Oder gibt es andere Gründe (Beispiele), die das verhindern?
Wenn Sie solche Dinge entfernen, haben Sie nicht mehr C, sondern eine völlig neue Sprache, die * ähnlich (aber nicht kompatibel) ist. –
'+' hängt vom Kontext ab: in '40 + 2' bedeutet es ganzzahlige Addition; in '40 + 2.0' bedeutet es Gleitkommaaddition. – pmg
@pmg Der Parser kümmert sich nicht, was die Arten von Dingen sind. – sepp2k