Plexeme
Fixtype of preprocessing lexems.
This is a tagged union type, introduced by fty::deftagsum.
Member Tags → Types
- :header → plexeme-header
- :ident → plexeme-ident
- :number → plexeme-number
- :char → plexeme-char
- :string → plexeme-string
- :punctuator → plexeme-punctuator
- :other → plexeme-other
- :block-comment → plexeme-block-comment
- :line-comment → plexeme-line-comment
- :newline → plexeme-newline
- :spaces → plexeme-spaces
- :horizontal-tab → plexeme-horizontal-tab
- :vertical-tab → plexeme-vertical-tab
- :form-feed → plexeme-form-feed
This consists of preprocessing tokens [C17:6.4] [C17:A.1.1],
with the addition of comments and white space.
We reuse some of the fixtypes for ASTs here.
The :other case corresponds to
the last alternative in the ABNF grammar rule for preprocessing-token,
as well as the prose description of the rule in [C17].
It consists of the code of the character.
For (block and line) comments, we include the content,
consisting of the codes of the characters.
For block comments, these are all the characters
from just after the opening /* to just before the closing */.
For line comments, these are all the characters
from just after the opening // to just before the closing new-line.
We keep the information about the three possible kinds of new-line,
and of all other white space characters,
according to the ABNF grammar rule for white-space.
Since spaces (code 32) often occur in consecutive chunks,
we represent them more efficiently as chunks, via positive counts.
Subtopics
- Plexeme-fix
- Fixing function for plexeme structures.
- Plexemep
- Recognizer for plexeme structures.
- Plexeme-case
- Case macro for the different kinds of plexeme structures.
- Plexeme-equiv
- Basic equivalence relation for plexeme structures.
- Plexeme-kind
- Get the kind (tag) of a plexeme structure.
- Plexeme-string
- Plexeme-spaces
- Plexeme-punctuator
- Plexeme-other
- Plexeme-number
- Plexeme-newline
- Plexeme-line-comment
- Plexeme-ident
- Plexeme-header
- Plexeme-char
- Plexeme-block-comment
- Plexeme-vertical-tab
- Plexeme-horizontal-tab
- Plexeme-form-feed