fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int get_token(const char *str, const char **start, const char **end)
  5. {
  6. str += strspn(str, " \t\r\n");
  7. if (!str[0]) return 0;
  8.  
  9. *start = *end = str;
  10.  
  11. if (strchr("()", str[0]))
  12. *end += 1;
  13. else
  14. *end += strcspn(str, "() \t\r\n");
  15.  
  16. return 1;
  17. }
  18.  
  19. int main(void) {
  20. const char *input = "(define (add x y) (+ x y))";
  21. const char *token, *token_end = input;
  22.  
  23. while(get_token(token_end, &token, &token_end))
  24. {
  25. printf("%.*s\n", (int)(token_end - token), token);
  26. }
  27.  
  28. return 0;
  29. }
  30.  
Success #stdin #stdout 0s 2156KB
stdin
Standard input is empty
stdout
(
define
(
add
x
y
)
(
+
x
y
)
)