diff options
| author | kartofen <kartofen.mail.0@protonmail.com> | 2025-07-05 12:14:27 +0300 |
|---|---|---|
| committer | kartofen <kartofen.mail.0@protonmail.com> | 2025-07-05 12:14:27 +0300 |
| commit | 9b4c8231a368524f9e797af111019ce95823f981 (patch) | |
| tree | f57eb9f80883bdab57d00a97ad97508ecdbb0c2d /demos/sample-files | |
| parent | 98254bbeb96e1c868d761e81f39f59744a6837c6 (diff) | |
lalr now acutally works
Diffstat (limited to 'demos/sample-files')
| -rw-r--r-- | demos/sample-files/parser-skeleton.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/demos/sample-files/parser-skeleton.c b/demos/sample-files/parser-skeleton.c index facbc1b..031d829 100644 --- a/demos/sample-files/parser-skeleton.c +++ b/demos/sample-files/parser-skeleton.c @@ -18,13 +18,33 @@ enum symbol { SYMBOLS_END, }; -static symbol toklist[] = {N0, PLUS, N1, END_INPUT}; -static symbol *tok = toklist; +static inline symbol char_to_token(char c) +{ + switch(c) { + case '+': return PLUS; + case '-': return MINUS; + case '(': return LPAREN; + case ')': return RPAREN; + case '0': return N0; + case '1': return N1; + case 0 : return END_INPUT; + default: fprintf(stderr, "ERROR: Unknown character '%c'\n", c); exit(1); + } +} -symbol toklist_eat() { return *(tok++); } // unsafe -symbol toklist_peek() { return *tok; } // unsafe +static char *input; -int main(void) +symbol toklist_eat() { return char_to_token(*(input++)); } // unsafe +symbol toklist_peek() { return char_to_token(*input); } // unsafe + +int main(int argc, char **argv) { + if(argc != 2) { + fprintf(stderr, "ERROR: Not enough arguments\n"); + return 1; + } + + input = argv[1]; + return lr_parser(); } |
