-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStateMachine.h
39 lines (30 loc) · 1.07 KB
/
StateMachine.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
#pragma once
#include "Token.h"
enum MachineState {
START_STATE, IDENTIFIER_STATE, INTEGER_STATE, CANTMOVE_STATE,
LCURLY_STATE,RCURLY_STATE,RPAREN_STATE, LPAREN_STATE, ASSIGNMENT_STATE, PLUS_STATE,
SEMICOLON_STATE,ENDFILE_STATE, LESS_STATE,INSERTION_STATE,
DIVIDE_STATE,TIMES_STATE, BLOCK1_STATE, BLOCK2_STATE,LINECOMMENT_STATE,
LAST_STATE
};
enum CharacterType {
LETTER_CHAR, DIGIT_CHAR, WHITESPACE_CHAR, PLUS_CHAR, BAD_CHAR,
RCURLY_CHAR,LCURLY_CHAR,RPAREN_CHAR, LPAREN_CHAR, ASSIGNMENT_CHAR,UNDERSCORE_CHAR,
SEMICOLON_CHAR, ENDFILE_CHAR, LESS_CHAR, INSERTION_CHAR,
DIVIDE_CHAR, TIMES_CHAR,
LAST_CHAR
};
class StateMachineClass
{
public:
StateMachineClass();
MachineState UpdateState(char currentCharacter, TokenType &
correspondingTokenType);
private:
MachineState mCurrentState;
// The matrix of legal moves:
MachineState mLegalMoves[LAST_STATE][LAST_CHAR];
// Which end-machine-states correspond to which token types.
// (non end states correspond to the BAD_TOKEN token type)
TokenType mCorrespondingTokenTypes[LAST_STATE];
};