forked from RohacekD/IFJ2015
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscanner.h
117 lines (111 loc) · 3.43 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
#ifndef SCANNER_H
#define SCANNER_H
#include <stdbool.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include "token.h"
#include "error.h"
#include "str.h"
/* @var int citac radku*/
extern int line;
/* @var int citac znaku na radku*/
extern int character;
/* @var int priznak chyby */
extern int errorFlag;
/*
* Hlavni fce lexykalniho analyzatoru pokud nastane chyba nevrati naalokovany token
* @param tToken v teto strukutre je vracen nacteny token
* @param FILE[in] inject cteneho souboru
* @return 1 pokud prosla analyza ok
*/
int getToken(tToken*, FILE*);
/*
prevede string v tokenu na hodnotu double
konverze vedeckeho zapisu cisla na double
vraci int urcujici uspech/neuspech
v pointeru vraci hodnotu
*/
int strToDouble(string*, double*);
/**
* Prevede obsah string na int. Pokud je obsah platnym celym cislem.
* @param forConversion - string, ktery bude preveden na int
* @param val - ukazatel pomoci, ktereho vraci prevedenou hodnotu (v pripade chyby neprepisuje)
* @return 1 - pokud prevod probehne v poradku, jinak 0.
*/
int strToInt(string* forConversion, int* val);
/**
* Prevede obsah string na int. Pokud je obsah platnym celym binarnim cislem.
* @param forConversion - string, ktery bude preveden na int
* @param val - ukazatel pomoci, ktereho vraci prevedenou hodnotu (v pripade chyby neprepisuje)
* @return 1 - pokud prevod probehne v poradku, jinak 0.
*/
int strBinToInt(string* forConversion, int* val);
/**
* Prevede obsah string na int. Pokud je obsah platnym celym hexadecimalnim cislem.
* @param forConversion - string, ktery bude preveden na int
* @param val - ukazatel pomoci, ktereho vraci prevedenou hodnotu (v pripade chyby neprepisuje)
* @return 1 - pokud prevod probehne v poradku, jinak 0.
*/
int strHexToInt(string* forConversion, int* val);
/**
* Prevede obsah string na int. Pokud je obsah platnym celym oktalovym cislem.
* @param forConversion - string, ktery bude preveden na int
* @param val - ukazatel pomoci, ktereho vraci prevedenou hodnotu (v pripade chyby neprepisuje)
* @return 1 - pokud prevod probehne v poradku, jinak 0.
*/
int strOctToInt(string* forConversion, int* val);
/**
* Prevede string na string bez escape sekvenci
* @deprecated
* @param string - string, ktery bude preveden na int
* @return 1 - pokud prevod probehne v poradku, jinak 0.
*/
int unescapeStr(string*);
/**
* porovna string vuci klicovym slovum. Definovanym v poli keyWords
*
* @uses keyWords[][]
* @param string - string ktery bude porovnan s klicovymi slovy
* @return TokenTypes typ tokenu (TYPE_IDENTIFICATOR|[KEYW_AUTO-KEYW_RETURN])
*/
int isKeyWord(string*);
/*
* uvolni misto po tokenu
* @param token[in] token pro vycisteni
*/
void freeTokenMem(tToken*);
typedef struct tTQelem{
tToken token;
struct tTQelem* lptr;
struct tTQelem* rptr;
} *tTokenQueueElem;
typedef struct {
tTokenQueueElem First;//prvni prvek (ten co jde ven)
tTokenQueueElem Last;//posledni prvek (ten co prisel posledni
} tTokenQueue;
extern tTokenQueue *TQueue;
/*
* Inicializuje frontu v glob promenne
*/
void TQInit();
//void TQEnqueue(tToken*);toto je nas unget
/*
* Tuto fci volat jen z scanneru.
* @param token[out] vrati token pokud nejaky ve fronte je jiank NULL
*/
void TQDequeue(tToken*);//toto volat jen ze scanneru
/**
* Uvolni pamet po fronte tokenu
*/
void freeTokenQueue();
/*
* Zkopíruje token na frontu a vycisti ho
* @param token[in] vraceny token
*/
void ungetToken(tToken*);
/**
* Uvolni pamet po fronte tokenu
*/
void freeTokenQueue();
#endif