an inherently ambiguous language
Usually when a grammar is ambiguous you can fix it — rewrite the rules so each string gets one structure. But there exist context-free languages where this is hopeless: no matter what grammar you write for them, SOME string will always have more than one parse tree. The ambiguity is not a flaw in your particular grammar; it is baked into the language itself. Such a language is called inherently ambiguous.
Formally, a context-free language L is inherently ambiguous if EVERY context-free grammar that generates L is ambiguous — there is no unambiguous CFG for L at all. The standard example is L = { a^i b^j c^k : i = j OR j = k }, the strings where the a-count matches the b-count or the b-count matches the c-count. Any grammar for it must handle the i = j case and the j = k case with overlapping rules, and the strings where i = j = k (which satisfy both) are forced to have two distinct derivations no matter how the grammar is written. Proving inherent ambiguity is genuinely hard and usually relies on careful counting arguments (often via Ogden's lemma).
This matters because it marks a real, permanent limit on what disambiguation can achieve: for an inherently ambiguous language, the engineer's usual trick of 'just rewrite the grammar to encode precedence' simply cannot succeed. Fortunately, the syntax of real programming languages is not inherently ambiguous — language designers deliberately keep it unambiguous — so this is mostly a theoretical boundary rather than a daily obstacle. Do not confuse 'this grammar is ambiguous' (often fixable) with 'this language is inherently ambiguous' (never fixable); they are different statements about different objects.
L = { a^i b^j c^k : i = j or j = k } is inherently ambiguous: a string like a^n b^n c^n satisfies both conditions, and any CFG is forced to give it two distinct parse trees (one viewing it via i = j, one via j = k).
Inherently ambiguous = EVERY grammar for the language is ambiguous; no rewrite can ever fix it.
Distinguish a property of one grammar (an ambiguous grammar, often fixable) from a property of the language (inherent ambiguity, never fixable). Real programming-language syntax is not inherently ambiguous.