Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. // lab.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <fstream> 
  8. #include <sstream> 
  9.  
  10. using namespace std;
  11.  
  12. bool czy_liczba2(string liczba) {
  13.  
  14.     stringstream temp;
  15.     int liczba_int;
  16.  
  17.     temp << liczba;
  18.     if (temp >> liczba_int)
  19.         return 1;
  20.     return 0;
  21.  
  22. }
  23.  
  24.  
  25. void sprawdzanie(string linia, stringstream &slinia, string *stos, int &znaczniki) {
  26.  
  27.     bool czy_liczba = false;
  28.  
  29.     /* BLAD W TAGACH POCZATKOWYCH */
  30.  
  31.     slinia << linia;
  32.     getline(slinia, linia, '>');
  33.     if (linia != "<mi" && linia != "<mo" && linia != "<mn") throw 1; // blad tagow
  34.  
  35.      /* BLAD SKLADNIOWY */
  36.  
  37.     stos[znaczniki] = linia;
  38.     getline(slinia, linia, '<');
  39.     czy_liczba = czy_liczba2(linia);
  40.     if (czy_liczba && stos[znaczniki] != "<mn")throw 1.0;
  41.     if (!czy_liczba && stos[znaczniki] == "<mn")throw 1.0;
  42.     if (czy_liczba && stos[znaczniki] == "<mi")throw 1.0;
  43.     if (czy_liczba && stos[znaczniki] == "<mo")throw 1.0;
  44.     if (stos[znaczniki] == "<mo" && linia != "+" && linia != "-" && linia != "/" && linia != "*"&& linia != "=")throw 1.0;
  45.  
  46.     /* BLAD W TAGACH KONCOWYCH */
  47.  
  48.     getline(slinia, linia, '>');
  49.     if (stos[znaczniki] == "<mi" && linia != "/mi")throw 1;
  50.     if (stos[znaczniki] == "<mn" && linia != "/mn")throw 1;
  51.     if (stos[znaczniki] == "<mo" && linia != "/mo")throw 1;
  52.  
  53.     znaczniki++;
  54.  
  55.  
  56. }
  57.  
  58. void spr2(string linia, bool &mrow, bool &mfenced) {
  59.  
  60.  
  61.     if (linia == "<mfenced>") mfenced = true;
  62.     if (linia == "<mrow>") mrow = true;
  63.     if (linia == "</mfenced>") mfenced = false;
  64.     if (linia == "</mrow>") mrow = false;
  65.  
  66. }
  67.  
  68. void mathML(fstream &file) {
  69.  
  70.     string linia;
  71.     stringstream slinia;
  72.     string stos[50];
  73.     string *wsk = &stos[0];
  74.     int znaczniki = 0;
  75.     unsigned int nr_linii = 1;
  76.     bool msup = false;
  77.     bool mfenced = false;
  78.     bool mrow = false;
  79.  
  80.     try {
  81.  
  82.         getline(file, linia);
  83.         while (!file.eof()) {
  84.             if (linia[0] == '<' && linia[1] == 'm' && linia[2] == 'a' && linia[3] == 't' && linia[4] == 'h')break;
  85.             getline(file, linia);
  86.         }
  87.  
  88.         while (!file.eof()) {
  89.  
  90.             getline(file, linia);
  91.             nr_linii++;
  92.             /* Czy koniec pliku? */
  93.             if (linia == "</math>") {
  94.                 if (mrow || mfenced)throw 'a';
  95.                 cout << "Nie ma bledow! " << endl;
  96.                 return;
  97.             }
  98.             /* Czy msup? */
  99.             if (linia == "<msup>") {
  100.                 msup = true;
  101.                 while (true) {
  102.                     getline(file, linia);
  103.                     nr_linii++;
  104.                     if (linia == "</msup>")break;
  105.                     spr2(linia, mrow, mfenced);
  106.                        
  107.                     if (linia != "<mfenced>" && linia != "<mrow>" && linia != "</mfenced>" && linia != "</mrow>")sprawdzanie(linia, slinia, wsk, znaczniki);
  108.                 }
  109.                 znaczniki = 0;
  110.                 for (int i = 0; i < 50; i++)stos[i] = "";
  111.                 if (mrow || mfenced)throw 'a';
  112.             }
  113.         //   Czy nie msup?
  114.             if (msup) {
  115.                 getline(file, linia);
  116.                 nr_linii++;
  117.                 msup = false;
  118.                
  119.             }
  120.             spr2(linia, mrow, mfenced);
  121.             if (linia != "<mfenced>" && linia != "<mrow>" && linia != "</mfenced>" && linia != "</mrow>")sprawdzanie(linia, slinia, wsk, znaczniki);
  122.            
  123.         }
  124.    
  125.     }
  126.  
  127.     catch (int) {
  128.         cout << "Blad w tagach. Linia nr " << nr_linii << " ---> " << linia << endl;
  129.         return;
  130.     }
  131.     catch (double) {
  132.         cout << "Blad w skladni, Linia nr " << nr_linii << " ---> " << linia << endl;
  133.         return;
  134.     }
  135.     catch (char) {
  136.         cout << "Brak tagu mfenced lub mrow!" << endl;
  137.     }
  138. }
  139.  
  140.  
  141. int main()
  142. {
  143.  
  144.     fstream file;
  145.     file.open("pp.txt", ios::in);
  146.     if (!file.good())exit(0);
  147.  
  148.     mathML(file);
  149.  
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement