compiler.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /**
  2. ******************************************************************************
  3. * @file : compiler.c
  4. * @author : simon
  5. * @brief : None
  6. * @attention : None
  7. * @date : 2023/8/17
  8. ******************************************************************************
  9. */
  10. #include "common.h"
  11. #include "compiler.h"
  12. #include "scanner.h"
  13. void compile(const char *source) {
  14. initScanner(source);
  15. int line = -1;
  16. /// \brief 如 print 1 + 2; 则会输出
  17. /// 1 31 'print'
  18. /// | 21 '1'
  19. /// | 7 '+'
  20. /// | 21 '2'
  21. /// | 8 ';'
  22. /// 2 39 '' // <EOF token>
  23. for (;;) {
  24. Token token = scanToken();
  25. if (token.line != line) {
  26. printf("%4d ", token.line);
  27. line = token.line;
  28. } else {
  29. printf(" | ");
  30. }
  31. /// %.*s: *用来指定宽度,对应一个整数。
  32. /// .(点)与后面的数合起来 是指定必须输出这个宽度,
  33. /// 如果所输出的字符串长度大于这个数,则按此宽度输出,如果小于,则输出实际长度
  34. printf("%2d '%.*s'\n", token.type, token.length, token.start);
  35. if (token.type == TOKEN_EOF) break;
  36. }
  37. }