79 lines
1.5 KiB
C
79 lines
1.5 KiB
C
/**
|
|
* Contains the interface for reading tokens from a file.
|
|
*/
|
|
#ifndef TOKEN_H
|
|
#define TOKEN_H
|
|
|
|
#include <stddef.h>
|
|
|
|
/**
|
|
* A list of all possible tokens.
|
|
*/
|
|
typedef enum {
|
|
// Keywords
|
|
TOKEN_MODULE,
|
|
TOKEN_IMPORT,
|
|
TOKEN_SEMICOLON,
|
|
|
|
// Symbols
|
|
TOKEN_PARENT_OPEN,
|
|
TOKEN_PARENT_CLOSE,
|
|
TOKEN_BRACKET_OPEN,
|
|
TOKEN_BRACKET_CLOSE,
|
|
TOKEN_COMMA,
|
|
|
|
// Primitives
|
|
TOKEN_VOID,
|
|
|
|
// Variable
|
|
TOKEN_IDENTIFIER,
|
|
} Token;
|
|
|
|
/**
|
|
* Holds additional information about a token.
|
|
*/
|
|
typedef struct {
|
|
/// @brief The textual representation of a token.
|
|
/// Note that this is not necessarily null-terminated.
|
|
char* text;
|
|
|
|
/// @brief The length of the `text` string.
|
|
size_t text_length;
|
|
|
|
/// @brief The actual token.
|
|
Token token;
|
|
} TokenInfo;
|
|
|
|
typedef struct TokenStream TokenStream;
|
|
|
|
/**
|
|
* Returns a TokenStream for a text.
|
|
*
|
|
* @param code The text to read.
|
|
* @returns A handle to the TokenStream.
|
|
*/
|
|
TokenStream* tokenstream_open(const char* code);
|
|
|
|
/**
|
|
* Closes a TokenStream.
|
|
* @param ts The TokenStream to close.
|
|
*/
|
|
void tokenstream_close(TokenStream* ts);
|
|
|
|
/**
|
|
* Gets the next token from the TokenStream.
|
|
* @param ts The TokenStream to read from.
|
|
* @returns The next token read.
|
|
*/
|
|
Token tokenstream_next(TokenStream* ts);
|
|
|
|
/**
|
|
* Gets additional information about the last token that was returned
|
|
* by `tokenstream_next`.
|
|
*
|
|
* @param ts The TokenStream to use.
|
|
* @param info The TokenInfo object to store the results in.
|
|
*/
|
|
void tokenstream_info(TokenStream* ts, TokenInfo* info);
|
|
|
|
#endif |