Cin-browser interpreter · runs locally
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h> #include <string.h> int is_digit(char c) { return c >= '0' && c <= '9'; } int is_letter(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'; } char *KEYWORDS[] = {"if", "else", "while", "int", "return"}; int is_keyword(char *s) { for (int i = 0; i < 5; i++) { if (strcmp(s, KEYWORDS[i]) == 0) return 1; } return 0; } int main() { string src; printf("Enter source: "); scanf("%s", &src); int i = 0; while (src[i] != 0) { if (is_letter(src[i])) { string lex; while (is_letter(src[i]) || is_digit(src[i])) { lex += src[i]; i++; } if (is_keyword(lex)) printf("KW %s\n", lex); else printf("ID %s\n", lex); } else if (is_digit(src[i])) { string lex; while (is_digit(src[i])) { lex += src[i]; i++; } printf("NUM %s\n", lex); } else if (src[i] == '+' || src[i] == '-' || src[i] == '*' || src[i] == '/' || src[i] == '=' || src[i] == '<' || src[i] == '>') { printf("OP %c\n", src[i]); i++; } else if (src[i] == '(' || src[i] == ')' || src[i] == '{' || src[i] == '}' || src[i] == ';' || src[i] == ',') { printf("SYM %c\n", src[i]); i++; } else { printf("ERROR illegal char '%c' at %d\n", src[i], i); i++; } } return 0; }
45 lines
Output
Write some code, then press Run. Stdout and errors appear here.