diff --git a/Exercise 3/Lexer.c b/Exercise 3/Lexer.c new file mode 100644 index 0000000..12993d4 --- /dev/null +++ b/Exercise 3/Lexer.c @@ -0,0 +1,28 @@ +#include "Lexer.h" + +int start(char* src) { + if (src != 0 && src != '\0') { // checking if the string is empty or invalid + return _GET_NEXT_CHARACTER_; + } + return _STOP_; +} + +int getNextCharacter(char* src) { + return _STOP_; // placeholder +} + +int readIdentifier(char* src) { + return _STOP_; // placeholder +} + +int readNumLit(char* src) { + return _STOP_; // placeholder +} + +int readOperator(char* src) { + return _STOP_; // placeholder +} + +int readPunctuation(char* src) { + return _STOP_; // placeholder +} diff --git a/Exercise 3/Lexer.h b/Exercise 3/Lexer.h new file mode 100644 index 0000000..3e6fbe7 --- /dev/null +++ b/Exercise 3/Lexer.h @@ -0,0 +1,26 @@ +/* symbols */ +#define _LETTER_ 1 +#define _DIGIT_ 2 +#define _OPERATOR_ 3 +#define _PUNCTUATION_ 4 +#define _END_OF_LINE_ 5 +#define _UNKNOWN_ 10 + +/* state */ +#define _START_ 100 +#define _GET_NEXT_CHARACTER_ 110 +#define _READ_IDENTIFIER_ 120 +#define _READ_NUM_LIT_ 130 +#define _READ_OPERATOR_ 140 +#define _READ_PUNCTUATION_ 150 +#define _STOP_ 999 +#define _ERROR_ 1000 + +/* functions */ +int start(char*); +int getNextCharacter(char*); +int readIdentifier(char*); +int readNumLit(char*); +int readOperator(char*); +int readPunctuation(char*); +int main(); diff --git a/Exercise 3/TestLexer.c b/Exercise 3/TestLexer.c new file mode 100644 index 0000000..65e7559 --- /dev/null +++ b/Exercise 3/TestLexer.c @@ -0,0 +1,42 @@ +#include +#include "Lexer.h" +#include "Lexer.c" + +int main() { + // variables + char* sourcecode = "index = 2 * count + 42;"; // input string + int lexer_state = _START_; // int var for the state machine + + // checking var values + printf(sourcecode); // printing the input string to check it + + // main loop + do { + switch (lexer_state) { // state machine starts here + case _START_: + lexer_state = start(sourcecode); + break; + case _GET_NEXT_CHARACTER_: + lexer_state = getNextCharacter(sourcecode); + break; + case _READ_IDENTIFIER_: + lexer_state = readIdentifier(sourcecode); + break; + case _READ_NUM_LIT_: + lexer_state = readNumLit(sourcecode); + break; + case _READ_OPERATOR_: + lexer_state = readOperator(sourcecode); + break; + case _READ_PUNCTUATION_: + lexer_state = readPunctuation(sourcecode); + break; + default: lexer_state = _ERROR_; + } + } while (lexer_state != _STOP_); // state machine ends here + + // printf("Lexer exited with code "); + // printf(lexer_state); + + return 0; +}