Guest User

Untitled

a guest
Jan 6th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6. #define MAX_NAME 50
  7.  
  8. int look = 0;
  9. char name[MAX_NAME+1];
  10. 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 };
  11.  
  12. void next() {
  13.     look = getchar();
  14. }
  15.  
  16. // <name> ::= ['_'|<letter>] '_'|<letter>|<number>
  17. char* getName() {
  18.     int i = 0;
  19.    
  20.     if (look == '_' || isalpha(look))
  21.     while ((look == '_' || isalnum(look)) && i < MAX_NAME) {
  22.         name[i++] = look;
  23.         next();
  24.     }
  25.     name[i] = '\0';
  26.  
  27.     return name;
  28. }
  29.  
  30. // <number> ::= [0-9]+
  31. char* getNumber() {
  32.     int i = 0;
  33.    
  34.     while ((isdigit(look)) && i < MAX_NAME) {
  35.         name[i++] = look;
  36.         next();
  37.     }
  38.     name[i] = '\0';
  39.  
  40.     return name;
  41. }
  42.  
  43. void match(char ch) {
  44.     if (look != ch) {
  45.         printf("Invalid symbol %c\n", ch);
  46.         exit(0);
  47.     }
  48.  
  49.     next();
  50. }
  51.  
  52. // <expression> ::= <number>+
  53. void expression() {
  54.     char var = name[0];
  55.     match('=');
  56.    
  57.     if (!isdigit(look)) {
  58.         printf("Not a number\n");
  59.         exit(0);
  60.     }
  61.    
  62.     vars['z' - tolower(var)] = atoi(getNumber());
  63. }
  64.  
  65. // print <var>
  66. void print() {
  67.     match(' ');
  68.  
  69.     if (!isalpha(look)) {
  70.         printf("Not a variable!\n");
  71.         exit(0);
  72.     }
  73.    
  74.     printf("%d\n", vars['z' - look]);
  75.     next();
  76. }
  77.  
  78. // <program> ::= <expression> | <print>
  79. void program() {
  80.     getName();
  81.    
  82.     if (strlen(name) == 1 && isalpha(name[0])) { // expression
  83.         expression();
  84.     } else if (!strcmp(name, "print")) { // print
  85.         print();
  86.     } else {
  87.         printf("Invalid program\n");
  88.         exit(0);
  89.     }
  90. }
  91.  
  92. int main()
  93. {
  94.     next();
  95.    
  96.     while (look != '\n' && look != EOF) {
  97.         program();
  98.         match(';');
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment