Advertisement
Guest User

Puca

a guest
Dec 22nd, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include "Parser.h"
  2. #include "LinearEquation.h"
  3. #include "Error.h"
  4. #include <string>
  5. #include <cctype>
  6.  
  7. using namespace std;
  8.  
  9. ReadFile::ReadFile(const string& s) : fileName(s) {
  10.     f.open(s);
  11.     if (!f.is_open())
  12.         throw Bad_File_Name(s);
  13. }
  14.  
  15. int ReadFile::ReadChar() {
  16.     pos++;
  17.     return f.get();
  18. }
  19.  
  20. void ReadFile::ReadSpaces() {
  21.     while(isspace(f.peek())) { // remove spaces before sign
  22.         ReadChar();
  23.     }
  24. }
  25.  
  26.  
  27.  
  28. double ReadFile::ReadNumber(bool first) {
  29.     ReadSpaces();
  30.  
  31.     int sign = 1;
  32.     double num = 0, power = 1;
  33.     if (f.peek() == '+') { // remove sign
  34.         ReadChar();
  35.         sign = 1;
  36.     } else if (f.peek() == '-') {
  37.         ReadChar();
  38.         sign = -1;
  39.     }
  40.  
  41.     ReadSpaces();
  42.  
  43.     if (islower(f.peek()) || isupper(f.peek())) // there is no number
  44.         return sign;
  45.     else if (!first) // there is no sign, not first
  46.         throw Bad_Sign(line, pos, fileName);
  47.  
  48.  
  49.     while (isdigit(f.peek())) { // before '.'
  50.         num = num * 10 + ReadChar() - '0';
  51.     }
  52.  
  53.     if (f.peek() == '.') {
  54.         ReadChar();
  55.     } else if (islower(f.peek()) || isupper(f.peek()))
  56.         return num;
  57.     else
  58.         throw Bad_Number(line, pos, fileName);
  59.  
  60.     while (f.peek() <= '9' && f.peek() >= '0') { //after '.'
  61.         power /= 10;
  62.         num += power * (ReadChar() - '0');
  63.     }
  64.     return num;
  65. }
  66.  
  67. string* ReadFile::ReadVariable() {
  68.     ReadSpaces();
  69.  
  70.     string* sol = new string;
  71.  
  72.     while (!isspace(f.peek()) && f.peek() != '+' && f.peek() != '-' && f.peek() != '=') {
  73.         sol->push_back(ReadChar());
  74.     }
  75.  
  76.     while (isspace(f.peek()) && f.peek() != '\n')
  77.         ReadChar();
  78.  
  79.     return sol;
  80. }
  81. LinearEquation* ReadFile::ReadLine() {
  82.     LinearEquation* le = new LinearEquation;
  83.     LinearEquation les;
  84.  
  85.     line++;
  86.     pos = 1;
  87.  
  88.     string* var;
  89.     int num;
  90.     num = ReadNumber(true);
  91.     var = ReadVariable()
  92.     *le;
  93. //    (*le)[(*var)] += num;
  94.  
  95.     ReadSpaces();
  96.  
  97.     while (f.peek() != '=') {
  98.         num = ReadNumber();
  99.         var = ReadVariable()
  100.         (*le)[*var] += num;
  101.     }
  102.     while (f.peek() != '\n') {
  103.         num = -ReadNumber();
  104.         var = ReadVariable();
  105.         (*le)[*var] += num;
  106.     }
  107.  
  108.     return le;
  109. }
  110.  
  111. SystemOfLinearEquations* ReadFile::ReadSystem() {
  112.     nullptr;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement