Node: forward near far, Next: implementation constructor destructor operator uses import initialization, Previous: external as a weak keyword, Up: Parsing keywords
forward
, near
and far
as weak keywordsforward
is a little special in ISO 7185 in that it is no
keyword, so it may be used as an identifier and a directive at the
same time. That's more than what our weak keywords allow.
This problem would be easy to solve if we just parsed it as a plain
identifier (LEX_ID
) and then check that it was in fact
forward
.
However, the same applies to the BP directives near
and
far
. (At least so it seems – the BP documentation claims
they're reserved words, but the compiler seems to think otherwise.)
Parsing all the three together as an identifier and then checking
which one it was fails because forward
is a remote directive,
i.e. a routine declared so has no body, while near
and
far
are not. So it makes a syntactical difference for what
follows.
So we need a new trick: We lex the three like regular (non-weak)
keywords, but throw their tokens together with LEX_ID
very
early in the parser, in the id
rule which is used everywhere
an existing identifier is expected. But in the context of these
three directives, no identifier is allowed, so the three tokens can
be used without conflicts between each other or with id
.