Advertisement
Guest User

Untitled

a guest
Aug 19th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.54 KB | None | 0 0
  1. import std.stdio;
  2. import std.string;
  3. import std.conv;
  4.  
  5. enum TokenType : string {EOF = "EOF", PLUS = "PLUS", INTEGER = "INTEGER"}
  6.  
  7. class Token(T) {
  8.     T value;
  9.     string type;
  10.  
  11.     this(T _value, string _type) {
  12.         value = _value;
  13.         type = _type;
  14.     }
  15.  
  16.     override string toString() const{
  17.         return "Token value: " ~ to!string(value) ~ "  type: " ~ type;
  18.     }
  19.  
  20. }
  21.  
  22. class Interpreter {
  23.     string expression;
  24.     char currentChar;
  25.     int position;
  26.  
  27.     this(string _exp) {
  28.         expression = _exp;
  29.         currentChar = '-';
  30.         position = 0;
  31.     }
  32.  
  33.     int express() {
  34.         int result;
  35.  
  36.         return result;
  37.     }
  38.  
  39.     Token getNextToken() {
  40.         Token token;
  41.         if(currentChar == ' ') {
  42.             skipWhitespace();
  43.         }
  44.         if(position >= expression.length) {
  45.             token = new Token!string("EOF", TokenType.EOF);
  46.             return token;
  47.         }
  48.         if(currentChar == '+') {
  49.             token = new Token!char('+', TokenType.PLUS);
  50.             return token;
  51.         }
  52.         if(currentChar >= '0' && currentChar <= '9') {
  53.             token = new Token!int(to!int(currentChar), TokenType.INTEGER);
  54.             return token;
  55.         }
  56.  
  57.         return token;
  58.     }
  59.  
  60.     Token eat(string t) {
  61.         Token token = getNextToken();
  62.         assert(token.type == t);
  63.         ++position;
  64.         return token;
  65.     }
  66.  
  67.     void skipWhitespace() {
  68.         while(currentChar == ' ') {
  69.             ++position;
  70.             if(position >= expression.length) break;
  71.             currentChar = expression[position];
  72.         }
  73.     }
  74. }
  75.  
  76. void main() {
  77.     while (true) {
  78.         writeln("Enter expression : ");
  79.         string input = readln();
  80.  
  81.         auto interpreter = new Interpreter(input);
  82.         auto result = interpreter.express();
  83.         writeln(result);
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement