53 lines
1.0 KiB
C
53 lines
1.0 KiB
C
/* vim: set filetype=c: */
|
|
|
|
#ifndef _TOKEN_H_
|
|
#define _TOKEN_H_
|
|
|
|
#include <stdio.h>
|
|
|
|
typedef struct Token Token;
|
|
struct Token;
|
|
typedef struct TokenListItem TokenListItem;
|
|
struct TokenListItem;
|
|
|
|
typedef long double NumToken;
|
|
typedef struct SepToken SepToken;
|
|
struct SepToken {
|
|
char sym;
|
|
TokenListItem* matching;
|
|
};
|
|
typedef char OpToken;
|
|
typedef struct ExprToken ExprToken;
|
|
struct ExprToken {
|
|
Token* lhs;
|
|
Token* op;
|
|
Token* rhs;
|
|
};
|
|
|
|
typedef struct Token Token;
|
|
struct Token {
|
|
enum {
|
|
TokenTypeNull, /* Invalid type */
|
|
TokenTypeNum,
|
|
TokenTypeSep,
|
|
TokenTypeOp,
|
|
TokenTypeExpr,
|
|
} type;
|
|
|
|
union {
|
|
NumToken num;
|
|
SepToken sep;
|
|
OpToken op;
|
|
ExprToken expr;
|
|
} data;
|
|
};
|
|
|
|
/* Recursively frees Token of type ExprToken and its children */
|
|
extern void ExprToken_uninit_recursive(Token* obj);
|
|
|
|
extern void Token_print(const Token* obj, FILE* file);
|
|
|
|
extern void Token_print_as_tree(const Token* obj, FILE* file);
|
|
|
|
#endif /* _TOKEN_H_ */
|