Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdlib.h>
- #define MAX_NAME 50
- int look = 0;
- char name[MAX_NAME+1];
- int vars[26] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- void next() {
- look = getchar();
- }
- // <name> ::= ['_'|<letter>] '_'|<letter>|<number>
- char* getName() {
- int i = 0;
- if (look == '_' || isalpha(look))
- while ((look == '_' || isalnum(look)) && i < MAX_NAME) {
- name[i++] = look;
- next();
- }
- name[i] = '\0';
- return name;
- }
- // <number> ::= [0-9]+
- char* getNumber() {
- int i = 0;
- while ((isdigit(look)) && i < MAX_NAME) {
- name[i++] = look;
- next();
- }
- name[i] = '\0';
- return name;
- }
- void match(char ch) {
- if (look != ch) {
- printf("Invalid symbol %c\n", ch);
- exit(0);
- }
- next();
- }
- // <expression> ::= <number>+
- void expression() {
- char var = name[0];
- match('=');
- if (!isdigit(look)) {
- printf("Not a number\n");
- exit(0);
- }
- vars['z' - tolower(var)] = atoi(getNumber());
- }
- // print <var>
- void print() {
- match(' ');
- if (!isalpha(look)) {
- printf("Not a variable!\n");
- exit(0);
- }
- printf("%d\n", vars['z' - look]);
- next();
- }
- // <program> ::= <expression> | <print>
- void program() {
- getName();
- if (strlen(name) == 1 && isalpha(name[0])) { // expression
- expression();
- } else if (!strcmp(name, "print")) { // print
- print();
- } else {
- printf("Invalid program\n");
- exit(0);
- }
- }
- int main()
- {
- next();
- while (look != '\n' && look != EOF) {
- program();
- match(';');
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment