Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Parser.h"
- #include "LinearEquation.h"
- #include "Error.h"
- #include <string>
- #include <cctype>
- using namespace std;
- ReadFile::ReadFile(const string& s) : fileName(s) {
- f.open(s);
- if (!f.is_open())
- throw Bad_File_Name(s);
- }
- int ReadFile::ReadChar() {
- pos++;
- return f.get();
- }
- void ReadFile::ReadSpaces() {
- while(isspace(f.peek())) { // remove spaces before sign
- ReadChar();
- }
- }
- double ReadFile::ReadNumber(bool first) {
- ReadSpaces();
- int sign = 1;
- double num = 0, power = 1;
- if (f.peek() == '+') { // remove sign
- ReadChar();
- sign = 1;
- } else if (f.peek() == '-') {
- ReadChar();
- sign = -1;
- }
- ReadSpaces();
- if (islower(f.peek()) || isupper(f.peek())) // there is no number
- return sign;
- else if (!first) // there is no sign, not first
- throw Bad_Sign(line, pos, fileName);
- while (isdigit(f.peek())) { // before '.'
- num = num * 10 + ReadChar() - '0';
- }
- if (f.peek() == '.') {
- ReadChar();
- } else if (islower(f.peek()) || isupper(f.peek()))
- return num;
- else
- throw Bad_Number(line, pos, fileName);
- while (f.peek() <= '9' && f.peek() >= '0') { //after '.'
- power /= 10;
- num += power * (ReadChar() - '0');
- }
- return num;
- }
- string* ReadFile::ReadVariable() {
- ReadSpaces();
- string* sol = new string;
- while (!isspace(f.peek()) && f.peek() != '+' && f.peek() != '-' && f.peek() != '=') {
- sol->push_back(ReadChar());
- }
- while (isspace(f.peek()) && f.peek() != '\n')
- ReadChar();
- return sol;
- }
- LinearEquation* ReadFile::ReadLine() {
- LinearEquation* le = new LinearEquation;
- LinearEquation les;
- line++;
- pos = 1;
- string* var;
- int num;
- num = ReadNumber(true);
- var = ReadVariable()
- *le;
- // (*le)[(*var)] += num;
- ReadSpaces();
- while (f.peek() != '=') {
- num = ReadNumber();
- var = ReadVariable()
- (*le)[*var] += num;
- }
- while (f.peek() != '\n') {
- num = -ReadNumber();
- var = ReadVariable();
- (*le)[*var] += num;
- }
- return le;
- }
- SystemOfLinearEquations* ReadFile::ReadSystem() {
- nullptr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement