lexer.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define true 1
  4. #define false 0
  5. #define STR 0
  6. #define VAR 1
  7. #define MISC 2
  8. typedef struct token {
  9. char *str;
  10. char type;
  11. struct token *chain;
  12. } token;
  13. char *spec = "()[]!&^|<>~%?=+-";
  14. char *char_line;
  15. token *token_start = NULL;
  16. token *token_head = NULL;
  17. int get_str_size(char *str) {
  18. int size = 0;
  19. for (char *s = str; *s != '\0'; s++)
  20. size++;
  21. return size;
  22. }
  23. char *get_middle(char *str, int start, int end) {
  24. int size = end - start + 1;
  25. char *str2 = (char *)malloc(sizeof(char) * size + 1);
  26. if (!str2)
  27. return NULL;
  28. for (int i = 0; i < size; i++)
  29. str2[i] = str[start + i];
  30. str2[size] = 0;
  31. return str2;
  32. }
  33. int create_token_from_line(int start, int end) {
  34. char *str = get_middle(char_line, start, end);
  35. if (!str)
  36. return 1;
  37. token *t = (token *)malloc(sizeof(token));
  38. if (!t)
  39. return 2;
  40. if (!token_start)
  41. token_head = t;
  42. else if (!token_head)
  43. token_start->chain = token_head = t;
  44. else {
  45. token_head->chain = t;
  46. token_head = t;
  47. }
  48. return 0;
  49. }
  50. int Main(char *line) {
  51. int start = 0;
  52. char mode = MISC;
  53. for (int c = 0; c < get_str_size(line); c++) {
  54. }
  55. return 0;
  56. }