Node: external as a weak keyword, Next: forward near far, Previous: attribute as a weak keyword, Up: Parsing keywords

##### `external` as a weak keyword

The situation about `external` is similar to `attribute`. However, on the positive side, we don't have to worry about constants which cannot be external – by definition, since initialization and external declaration contradict each other.

The new problems are that an `external` directive can be followed by `;`, `name` and by many more tokens if GPC will support a BP compatible `external` libname`` where libname can be a string constant expression.

So we have to consider the problem from the other side. In an `id_list` of a variable declaration (which is the only conflict, given the notes about attribute, attribute as a weak keyword.), an identifier can be followed only by `,` and `:`. These two tokens cannot follow an `external` directive (not even in `external` libname``).

However, in other contexts, identifiers can be followed by other tokens (even in an `id_list`, e.g. `procedure Foo (var External; i: Integer);`), so we accept `p_external` as a `new_identifier` everywhere except in variable declarations (`new_identifier_limited` `id_list_limited`).

`fjf793*.pas` are test programs for `external`.

(Basically the same applies to the deprecated `asmname`.)