Przeglądaj źródła

update Makefile

AbdeFaiz 5 miesięcy temu
rodzic
commit
93bf8bd8ac
4 zmienionych plików z 90 dodań i 70 usunięć
  1. 10 2
      Makefile
  2. 74 0
      src/Token.cpp
  3. 2 67
      src/Token.hpp
  4. 4 1
      src/main.cpp

+ 10 - 2
Makefile

@@ -1,9 +1,17 @@
 CC = g++
 FLAGS = -Wall
 
-test.out: src/main.cpp
+all: test.out
+
+Token.o : src/Token.cpp src/Token.hpp
+	$(CC) -c $(FLAGS) $< 
+
+Lexer.o : src/Lexer.cpp src/Lexer.hpp
+	$(CC) -c $(FLAGS) $< 
+
+test.out: src/main.cpp Token.o Lexer.o
 	$(CC) $(FLAGS) $^ -o $@
 	./$@
 
 clean:
-	rm -f test *.o
+	rm -f test.out *.o

+ 74 - 0
src/Token.cpp

@@ -1,7 +1,81 @@
 #include "Token.hpp"
 
+
+string token_name(TokenType t) {
+  switch (t) {
+      case END_OF_FILE: return "END_OF_FILE";
+      case NEWLINE: return "NEWLINE";
+      case NUMBER: return "NUMBER";
+      case IDENT: return "IDENT";
+      case STRING: return "STRING";
+      // Keywords
+      case LABEL: return "LABEL";
+      case GOTO: return "GOTO";
+      case PRINT: return "PRINT";
+      case INPUT: return "INPUT";
+      case LET: return "LET";
+      case IF: return "IF";
+      case THEN: return "THEN";
+      case ENDIF: return "ENDIF";
+      case WHILE: return "WHILE";
+      case REPEAT: return "REPEAT";
+      case ENDWHILE: return "ENDWHILE";
+      // Operators
+      case EQ: return "EQ";
+      case PLUS: return "PLUS";
+      case MINUS: return "MINUS";
+      case ASTERISK: return "ASTERISK";
+      case SLASH: return "SLASH";
+      case EQEQ: return "EQEQ";
+      case NOTEQ: return "NOTEQ";
+      case LT: return "LT";
+      case LTEQ: return "LTEQ";
+      case GT: return "GT";
+      case GTEQ: return "GTEQ";
+      default: return "UNKOWN";
+  }
+}
+
+TokenType token_type_from_name(const string &name) {
+  if (name == "END_OF_FILE") return END_OF_FILE;
+  if (name == "NEWLINE") return NEWLINE;
+  if (name == "NUMBER") return NUMBER;
+  if (name == "IDENT") return IDENT;
+  if (name == "STRING") return STRING;
+  // Keywords
+  if (name == "LABEL") return LABEL;
+  if (name == "GOTO") return GOTO;
+  if (name == "PRINT") return PRINT;
+  if (name == "INPUT") return INPUT;
+  if (name == "LET") return LET;
+  if (name == "IF") return IF;
+  if (name == "THEN") return THEN;
+  if (name == "ENDIF") return ENDIF;
+  if (name == "WHILE") return WHILE;
+  if (name == "REPEAT") return REPEAT;
+  if (name == "ENDWHILE") return ENDWHILE;
+  // Operators
+  if (name == "EQ") return EQ;
+  if (name == "PLUS") return PLUS;
+  if (name == "MINUS") return MINUS;
+  if (name == "ASTERISK") return ASTERISK;
+  if (name == "SLASH") return SLASH;
+  if (name == "EQEQ") return EQEQ;
+  if (name == "NOTEQ") return NOTEQ;
+  if (name == "LT") return LT;
+  if (name == "LTEQ") return LTEQ;
+  if (name == "GT") return GT;
+  if (name == "GTEQ") return GTEQ;
+  return UNKOWN; // Default case for unknown names
+}
+
+
 Token::Token(string tokenText, TokenType tokenKind):text(tokenText), kind(tokenKind) { }
 
+/* Checks if a string is a keyword, 
+   if it's the case returns the token associated
+   if not returns an identifier token
+*/
 TokenType checkIfKeyword(string &tokenText){
   TokenType token_type = token_type_from_name(tokenText);
   int token_value = static_cast<int>(token_type);

+ 2 - 67
src/Token.hpp

@@ -35,73 +35,8 @@ enum TokenType {
   UNKOWN = 999
 };
 
-string token_name(TokenType t) {
-  switch (t) {
-      case END_OF_FILE: return "END_OF_FILE";
-      case NEWLINE: return "NEWLINE";
-      case NUMBER: return "NUMBER";
-      case IDENT: return "IDENT";
-      case STRING: return "STRING";
-      // Keywords
-      case LABEL: return "LABEL";
-      case GOTO: return "GOTO";
-      case PRINT: return "PRINT";
-      case INPUT: return "INPUT";
-      case LET: return "LET";
-      case IF: return "IF";
-      case THEN: return "THEN";
-      case ENDIF: return "ENDIF";
-      case WHILE: return "WHILE";
-      case REPEAT: return "REPEAT";
-      case ENDWHILE: return "ENDWHILE";
-      // Operators
-      case EQ: return "EQ";
-      case PLUS: return "PLUS";
-      case MINUS: return "MINUS";
-      case ASTERISK: return "ASTERISK";
-      case SLASH: return "SLASH";
-      case EQEQ: return "EQEQ";
-      case NOTEQ: return "NOTEQ";
-      case LT: return "LT";
-      case LTEQ: return "LTEQ";
-      case GT: return "GT";
-      case GTEQ: return "GTEQ";
-      default: return "UNKOWN";
-  }
-}
-
-TokenType token_type_from_name(const string &name) {
-  if (name == "END_OF_FILE") return END_OF_FILE;
-  if (name == "NEWLINE") return NEWLINE;
-  if (name == "NUMBER") return NUMBER;
-  if (name == "IDENT") return IDENT;
-  if (name == "STRING") return STRING;
-  // Keywords
-  if (name == "LABEL") return LABEL;
-  if (name == "GOTO") return GOTO;
-  if (name == "PRINT") return PRINT;
-  if (name == "INPUT") return INPUT;
-  if (name == "LET") return LET;
-  if (name == "IF") return IF;
-  if (name == "THEN") return THEN;
-  if (name == "ENDIF") return ENDIF;
-  if (name == "WHILE") return WHILE;
-  if (name == "REPEAT") return REPEAT;
-  if (name == "ENDWHILE") return ENDWHILE;
-  // Operators
-  if (name == "EQ") return EQ;
-  if (name == "PLUS") return PLUS;
-  if (name == "MINUS") return MINUS;
-  if (name == "ASTERISK") return ASTERISK;
-  if (name == "SLASH") return SLASH;
-  if (name == "EQEQ") return EQEQ;
-  if (name == "NOTEQ") return NOTEQ;
-  if (name == "LT") return LT;
-  if (name == "LTEQ") return LTEQ;
-  if (name == "GT") return GT;
-  if (name == "GTEQ") return GTEQ;
-  return UNKOWN; // Default case for unknown names
-}
+string token_name(TokenType t);
+TokenType token_type_from_name(const string &name);
 
 TokenType checkIfKeyword(string &tokenText);
 

+ 4 - 1
src/main.cpp

@@ -4,8 +4,11 @@
 
 int main()
 {
-  std::string g = "IF";
+  std::string if_instr = "IF";
+  std::string ident = "myvar";
   std::cout << token_name(END_OF_FILE) << std::endl;
   std::cout << token_name(token_type_from_name("NEWLINE")) << std::endl;
+  std::cout << token_name(checkIfKeyword(if_instr)) << std::endl;
+  std::cout << token_name(checkIfKeyword(ident)) << std::endl;
   return 0;
 }