Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // lab.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <sstream>
- using namespace std;
- bool czy_liczba2(string liczba) {
- stringstream temp;
- int liczba_int;
- temp << liczba;
- if (temp >> liczba_int)
- return 1;
- return 0;
- }
- void sprawdzanie(string linia, stringstream &slinia, string *stos, int &znaczniki) {
- bool czy_liczba = false;
- /* BLAD W TAGACH POCZATKOWYCH */
- slinia << linia;
- getline(slinia, linia, '>');
- if (linia != "<mi" && linia != "<mo" && linia != "<mn") throw 1; // blad tagow
- /* BLAD SKLADNIOWY */
- stos[znaczniki] = linia;
- getline(slinia, linia, '<');
- czy_liczba = czy_liczba2(linia);
- if (czy_liczba && stos[znaczniki] != "<mn")throw 1.0;
- if (!czy_liczba && stos[znaczniki] == "<mn")throw 1.0;
- if (czy_liczba && stos[znaczniki] == "<mi")throw 1.0;
- if (czy_liczba && stos[znaczniki] == "<mo")throw 1.0;
- if (stos[znaczniki] == "<mo" && linia != "+" && linia != "-" && linia != "/" && linia != "*"&& linia != "=")throw 1.0;
- /* BLAD W TAGACH KONCOWYCH */
- getline(slinia, linia, '>');
- if (stos[znaczniki] == "<mi" && linia != "/mi")throw 1;
- if (stos[znaczniki] == "<mn" && linia != "/mn")throw 1;
- if (stos[znaczniki] == "<mo" && linia != "/mo")throw 1;
- znaczniki++;
- }
- void spr2(string linia, bool &mrow, bool &mfenced) {
- if (linia == "<mfenced>") mfenced = true;
- if (linia == "<mrow>") mrow = true;
- if (linia == "</mfenced>") mfenced = false;
- if (linia == "</mrow>") mrow = false;
- }
- void mathML(fstream &file) {
- string linia;
- stringstream slinia;
- string stos[50];
- string *wsk = &stos[0];
- int znaczniki = 0;
- unsigned int nr_linii = 1;
- bool msup = false;
- bool mfenced = false;
- bool mrow = false;
- try {
- getline(file, linia);
- while (!file.eof()) {
- if (linia[0] == '<' && linia[1] == 'm' && linia[2] == 'a' && linia[3] == 't' && linia[4] == 'h')break;
- getline(file, linia);
- }
- while (!file.eof()) {
- getline(file, linia);
- nr_linii++;
- /* Czy koniec pliku? */
- if (linia == "</math>") {
- if (mrow || mfenced)throw 'a';
- cout << "Nie ma bledow! " << endl;
- return;
- }
- /* Czy msup? */
- if (linia == "<msup>") {
- msup = true;
- while (true) {
- getline(file, linia);
- nr_linii++;
- if (linia == "</msup>")break;
- spr2(linia, mrow, mfenced);
- if (linia != "<mfenced>" && linia != "<mrow>" && linia != "</mfenced>" && linia != "</mrow>")sprawdzanie(linia, slinia, wsk, znaczniki);
- }
- znaczniki = 0;
- for (int i = 0; i < 50; i++)stos[i] = "";
- if (mrow || mfenced)throw 'a';
- }
- // Czy nie msup?
- if (msup) {
- getline(file, linia);
- nr_linii++;
- msup = false;
- }
- spr2(linia, mrow, mfenced);
- if (linia != "<mfenced>" && linia != "<mrow>" && linia != "</mfenced>" && linia != "</mrow>")sprawdzanie(linia, slinia, wsk, znaczniki);
- }
- }
- catch (int) {
- cout << "Blad w tagach. Linia nr " << nr_linii << " ---> " << linia << endl;
- return;
- }
- catch (double) {
- cout << "Blad w skladni, Linia nr " << nr_linii << " ---> " << linia << endl;
- return;
- }
- catch (char) {
- cout << "Brak tagu mfenced lub mrow!" << endl;
- }
- }
- int main()
- {
- fstream file;
- file.open("pp.txt", ios::in);
- if (!file.good())exit(0);
- mathML(file);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement