-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScanner.h
158 lines (142 loc) · 2.78 KB
/
Scanner.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**
* Projekt : Implementace prekladace imperativniho jazyka IFJ21
* @file Scanner.h
* @brief Lexikalna analyza
* @author Jakub Skunda (xskund02)
* @author Juraj Hatala (xhatal01)
*
*/
#ifndef _SCANNER_
#define _SCANNER_
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
/**
* @brief Mnozina typu tokenov
*
*/
typedef enum{
Identifier,
Keyword,
Integer,
Number,
String,
Minus,
Plus,
Multiplication,
Concatenation,
Sizeof,
Division,
Division_integer,
Less,
Less_equal,
More,
More_equal,
Assign,
Is_equal,
Not_equal,
L_bracket,
R_bracket,
Colon,
Comma,
End_of_file,
}Token_type;
/**
* @brief Mnozina stavov automatu
*
*/
typedef enum{
Scanner_state_reading,
Scanner_state_identifier_1,
Scanner_state_identifier_2,
Scanner_state_number_1,
Scanner_state_number_2,
Scanner_state_number_3,
Scanner_state_number_4,
Scanner_state_number_5,
Scanner_state_number_6,
Scanner_state_string_start,
Scanner_state_string_end,
Scanner_state_string_1,
Scanner_state_string_2,
Scanner_state_string_3,
Scanner_state_minus,
Scanner_state_comment_start,
Scanner_state_comment_block,
Scanner_state_comment_block_start,
Scanner_state_comment_block_end1,
Scanner_state_concatenation,
Scanner_state_division,
Scanner_state_less,
Scanner_state_more,
Scanner_state_assign,
Scanner_state_isequal,
Scanner_state_notequal,
}Scanner_state;
/**
* @brief Struktura Tokenu, ktora berie typ a
*
*/
typedef struct MyToken { //token
Token_type type; //typ tokenu
union{
int integer;
double number;
char *string;
}data;
}Token;
/**
* @brief Funkcia, ktora vrati token
*
* @param Myfile
* @param list
* @param MyToken
* @return int
*/
int tokenScan( FILE* Myfile, Token* MyToken);
/**
* @brief vytvorenie tokenu
*
* @return Token*
*/
Token* tokenCreate();
/**
* @brief inicializovanie tokenu
*
* @param MyToken
*/
void tokenInit(Token* MyToken);
void tokenFullup(Token* MyToken, Token_type type, char* att);
/**
* @brief vytvorenie stringu
*
* @return char*
*/
char* stringCreate();
/**
* @brief pridanie charakteru do stringu
*
* @param MyString
* @param newCharacter
* @param sizeOfStr
* @param charNb
* @return char*
*/
char* stringAddChar(char** MyString, int newCharacter, int* sizeOfStr, int* charNb);
/**
* @brief funkcia kontrolujuca ci je zadany retazec keyword
*
* @param word
* @return int
*/
int isKeyword(char *word);
/**
* @brief funkcia kontrolujuca ci je zadana sekvencia validna
*
* @param symbol
* @return int
*/
int isEscapeSeq(int symbol);
#endif //_SCANNER_