-
Notifications
You must be signed in to change notification settings - Fork 0
/
token.h
executable file
·75 lines (61 loc) · 2.79 KB
/
token.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* Filename: token.h
* Token declarations necessary for the scanner implementation
* CST8152, Assignment #2
* Author: Victor Fernandes, 040772243
* Version: 1.17.1
* Date: 30 January 2017
* Provided by: S^R
* The file is complete and MUST NOT be modified.
*/
#ifndef TOKEN_H_
#define TOKEN_H_
/*#pragma warning(1:4001) *//*to enforce C89 type comments - to make //comments an warning */
/*#pragma warning(error:4001)*//* to enforce C89 comments - to make // comments an error */
/* Constants */
#define VID_LEN 8 /* variable identifier length */
#define ERR_LEN 20 /* error message length */
#define INL_LEN 5 /* maximum number of digits for IL */
/* Token codes */
#define ERR_T 0 /* Error token */
#define SEOF_T 1 /* Source end-of-file token */
#define AVID_T 2 /* Arithmetic Variable identifier token */
#define SVID_T 3 /* String Variable identifier token */
#define FPL_T 4 /* Floating point literal token */
#define INL_T 5 /* Integer literal token */
#define STR_T 6 /* String literal token */
#define SCC_OP_T 7 /* String concatenation operator token */
#define ASS_OP_T 8 /* Assignment operator token */
#define ART_OP_T 9 /* Arithmetic operator token */
#define REL_OP_T 10 /* Relational operator token */
#define LOG_OP_T 11 /* Logical operator token */
#define LPR_T 12 /* Left parenthesis token */
#define RPR_T 13 /* Right parenthesis token */
#define LBR_T 14 /* Left brace token */
#define RBR_T 15 /* Right brace token */
#define KW_T 16 /* Keyword token */
#define COM_T 17 /* Comma token */
#define EOS_T 18 /* End of statement *(semi - colon) */
/* Operators token attributes */
typedef enum ArithmeticOperators {PLUS, MINUS, MULT, DIV} Arr_Op;
typedef enum RelationalOperators {EQ, NE, GT, LT} Rel_Op;
typedef enum LogicalOperators {AND,OR} Log_Op;
/* Structure declaring the token and its attributes */
typedef union TokenAttribute{
int get_int; /* integer attributes accessor */
Arr_Op arr_op; /* arithmetic operator attribute code */
Rel_Op rel_op; /* relational operator attribute code */
Log_Op log_op; /* logical operator attribute code */
int int_value; /* integer literal attribute (value) */
int kwt_idx; /* keyword index in the keyword table */
short str_offset; /* sring literal offset from the beginning of */
/* the string literal buffer (str_LTBL->cb_head) */
float flt_value; /* floating-point literal attribute (value) */
int vid_offset; /* the vid_offset member replaces vid_lex */
char err_lex[ERR_LEN+1]; /* error token attribite */
} TA;
typedef struct Token
{
int code; /* token code */
TA attribute; /* token attribute */
} Token;
#endif