Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma hdrstop
- //-------------------------------------------------------------------------—
- #pragma hdrstop
- //-------------------------------------------------------------------------—
- #pragma argsused
- #include<iostream>
- #include<fstream>
- #include<string>
- #include<vector>
- using namespace std;
- vector<string>v_int;
- vector<string>v_float;
- vector<string>v_char;
- vector<string> varName;
- string item_name;
- using namespace std;
- class errors
- {
- public:
- string c="nothing vars";
- string d="basic type is wrong";
- string e="vars cannt be";
- string j = "after int nothing right';'";
- string k = "after char nothin right';'";
- string n = "after float nothing right';'";
- string m = "Extra characters in the program";
- string u = "no ';'";
- string p = "Your variable is incorrectly assigned";
- string r = "Extra comma";
- string l = "no variables";
- }errors;
- string eraseSpaces(string &item_name){
- for(int i = 0; i < item_name.size(); i++){
- if(item_name[i] != 32){
- break;
- }
- if(item_name[i] == ' ' || item_name[i] == '\t'){ //удаляем все пробелы
- item_name.erase(i, 1); // удалить 1 символ
- i--;
- }
- }
- return item_name;
- }
- int proverkafloat(string &item_name, int i, int e){
- string b, c, a = item_name, k1;
- int m = 0, d, flag, flug = 0, k, q = 0, n = 0, s1 = 0, x = 0;
- for(i; i < item_name.size(); i++)
- {
- if(item_name[i] != 32){
- break;
- }
- }
- for(i; i < item_name.size(); i++){
- for (d = i; a[d] != ';'; d++) {
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- string k2;
- s1 = 1;
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122))
- {
- k2 += a[d];
- flug = 1;
- for (k = d+1; a[k] != '='; k++) {
- for(k; a[k] == ' ' ; k++){
- flag = 0;
- }
- if (a[k] == ';'){
- break;
- }
- if (a[k] == ','){
- q = 1;
- break;
- }
- if (a[k] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(a[k] == '='){
- break;
- }
- if ((a[k] >= 48 && 57 >= a[k]) || (a[k] >= 65 && a[k] <= 90) || (a[k] >= 97 && a[k] <= 122)){
- k2 += a[k];
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if ((flug = 1)){
- d = k;
- }
- v_float.push_back(k2);
- varName.push_back(k2);
- for (int x = 0; k2[x] != '\0'; x++) {
- k2[x] = '\0';
- }
- if (a[d] == '='){
- d++;
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if (a[d] == ';'){
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d+1] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] >= 48 && a[d] <= 57){
- for(d; a[d] != ','; d++){
- if(a[d] == ';'){
- break;
- }
- if ((a[d] >= 48 && a[d] <= 57) || (a[d] == '.')){
- flag = 1;
- }
- else {
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] == '.'){
- x = 1;
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- if (a[d+1] == ';'){
- flag = 1;
- }
- if (a[d+1] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- }
- }
- }
- }
- else{
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(x != 1){
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- if((q == 1) || (a[d+1] == ',')){
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- if (a[d] == ';' ){
- cout << errors.r << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] == ',' && a[d+1] == ';' ){
- cout << "Лишняя запятая" << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- q = 0;
- d++;
- }
- if (a[d+1] == ',' ){
- cout << "Лишняя запятая" << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(m == 1){
- break;
- }
- i = d;
- if(a[i] == ';'){
- break;
- }
- }
- if(m == 1){
- i = item_name.size();
- break;
- }
- i = d;
- }
- if (s1 == 0){
- cout << errors.l << endl << "Ошибка в строке: " << e << endl;
- }
- i = d;
- return i;
- }
- int proverkachar(string &item_name, int i, int e){
- string b, c, a = item_name;
- int m = 0, d, flag, flug = 0, k, q = 0, n = 0, s1 = 0;
- for(i; i < item_name.size(); i++){
- if(item_name[i] != 32){
- break;
- }
- }
- for(i; i < item_name.size(); i++){
- for (d = i; a[d] != ';'; d++) {
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- string k2;
- s1 = 1;
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- flug = 1;
- k2 += a[d];
- for (k = d+1; a[k] != '='; k++) {
- for(k; a[k] == ' ' ; k++){
- flag = 0;
- }
- if (a[k] == ';'){
- break;
- }
- if (a[k] == ','){
- q = 1;
- break;
- }
- if (a[k] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(a[k] == '='){
- break;
- }
- if ((a[k] >= 48 && 57 >= a[k]) || (a[k] >= 65 && a[k] <= 90) || (a[k] >= 97 && a[k] <= 122)){
- k2 += a[k];
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if ((flug = 1)){
- d = k;
- }
- v_char.push_back(k2);
- varName.push_back(k2);
- for (int x = 0; k2[x] != '\0'; x++) {
- k2[x] = '\0';
- }
- if (a[d] == '='){
- d++;
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if (a[d] == ';'){
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d+1] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] == 39){
- d++;
- if (a[d] >= 0 && a[d] <= 127){
- d++;
- }
- if (a[d] != 39){
- // cout << errors.x << endl << "Ошибка в строке: " << e << endl;
- }
- }
- else{
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- if(q == 1 || (a[d+1] == ',')){
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- if (a[d] == ';' ){
- cout << errors.r << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] == ',' && a[d+1] == ';' ){
- cout << "Лишняя запятая" << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- q = 0;
- d++;
- }
- if (a[d+1] == ',' ){
- cout << "Лишняя запятая" << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(m == 1){
- break;
- }
- i = d;
- if(a[i] == ';'){
- break;
- }
- }
- if(m == 1){
- i = item_name.size();
- break;
- }
- i = d;
- }
- if (s1 == 0){
- cout << errors.l << endl << "Ошибка в строке: " << e << endl;
- }
- i = d;
- return i;
- }
- int proverkaint(string &item_name, int i, int e)
- {
- string b, c, a = item_name, h;
- int m = 0, d, flag, flug = 0, k, q = 0, n = 0, s1 = 0, s2 = 0;
- for(i; i < item_name.size(); i++){
- if(item_name[i] != 32){
- break;
- }
- }
- for(i; i < item_name.size(); i++){
- for (d = i; a[d] != ';'; d++) {
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- string k2;
- s1 = 1;
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- k2 += a[d];
- flug = 1;
- for (k = d+1; a[k] != '='; k++) {
- for(k; a[k] == ' ' ; k++){
- flag = 0;
- }
- if (a[k] == ';'){
- break;
- }
- if (a[k] == ','){
- q = 1;
- break;
- }
- if (a[k] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(a[k] == '='){
- break;
- }
- if ((a[k] >= 48 && 57 >= a[k]) || (a[k] >= 65 && a[k] <= 90) || (a[k] >= 97 && a[k] <= 122)){
- k2 += a[k];
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if ((flug = 1)){
- d = k;
- }
- varName.push_back(k2);
- v_int.push_back(k2);
- for (int x = 0; k2[x] != '\0'; x++) {
- k2[x] = '\0';
- }
- if (a[d] == '='){
- d++;
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if (a[d] == ';'){
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d+1] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] != 48 && a[d] >= 49 && a[d] <= 57){
- for(d; a[d] != ','; d++){
- if(a[d] == ';'){
- break;
- }
- if (a[d] >= 48 && a[d] <= 57){
- flag = 0;
- }
- else {
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- }
- else{
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- if((q == 1) || (a[d+1] == ',')){
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- if (a[d] == ';' ){
- cout << errors.r << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d] == ',' && a[d+1] == ';' ){
- cout << "Лишняя запятая" << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- q = 0;
- d++;
- }
- if (a[d+1] == ',' ){
- cout << "Лишняя запятая" << endl << "erorr: " << e << endl;
- m = 1;
- break;
- }
- if(m == 1){
- break;
- }
- i = d;
- if(a[i] == ';'){
- break;
- }
- }
- if(m == 1){
- i = item_name.size();
- break;
- }
- i = d;
- }
- if (s1 == 0){
- cout << errors.l << endl << "Ошибка в строке: " << e << endl;
- }
- i = d;
- return i;
- }
- int proverkaprozent(string &item_name, int e){
- string b, c, a = item_name, k2;
- int m = 0, d, flag, flug = 0, k, q = 0, n = 0, s1 = 0, i, g = 0;
- for(i = 0; i < item_name.size(); i++){
- if(item_name[i] != 32){
- break;
- }
- }
- for (i; i < item_name.size(); i++) {
- for (d = i; a[d] != ';'; d++) {
- for(d; a[d] == ' ' ; d++){
- flag = 0;
- }
- s1 = 1;
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- flug = 1;
- k2 = a[d];
- for (k = d; a[k] != ';'; k++) {
- k++;
- for(k; a[k] == ' ' ; k++){
- flag = 0;
- }
- if (a[k] == ';'){
- break;
- }
- if (a[k] == '%'){
- for(int x = 0; x < v_int.size(); x++){
- if(v_int[x] == k2){
- n = 1;
- break;
- }
- }
- if (n != 1){
- cout << "No right tip)" << endl;
- m = 1;
- break;
- }
- }
- if (a[k] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if(a[k] == '='){
- break;
- }
- if ((a[k] >= 48 && 57 >= a[k]) || (a[k] >= 65 && a[k] <= 90) || (a[k] >= 97 && a[k] <= 122)){
- k2 += a[k];
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- }
- else{
- cout << errors.e << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- for (int x = 0; k2[x] != '\0'; x++) {
- k2[x] = '\0';
- }
- if ((flug = 1)){
- d = k;
- }
- if (a[d] == '='){
- d++;
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if (a[d] == ';'){
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if (a[d+1] == '\0'){
- cout << errors.u << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- k2 = a[d];
- for(d; a[d] != '%'; d++){
- d++;
- g = 1;
- if(a[d] == '%'){
- break;
- }
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if ((a[d] >= 48 && 57 >= a[d]) || (a[d] >= 65 && a[k] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- k2 += a[d];
- }
- else {
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- for(int x = 0; x < v_int.size(); x++){
- if(v_int[x] == k2){
- n = 1;
- break;
- }
- }
- if (n != 1){
- cout << "No right tip)" << endl;
- m = 1;
- break;
- }
- n = 0;
- for (int x = 0; k2[x] != '\0'; x++) {
- k2[x] = '\0';
- }
- }
- else{
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if(g == 1){
- d++;
- if ((a[d] >= 65 && a[d] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- k2 = a[d];
- for(d; a[d] != ';'; d++){
- d++;
- if(a[d] == '%'){
- break;
- }
- if(a[d] == ';'){
- break;
- }
- for(d; a[d] == ' '; d++){
- flag = 0;
- }
- if ((a[d] >= 48 && 57 >= a[d]) || (a[d] >= 65 && a[k] <= 90) || (a[d] >= 97 && a[d] <= 122)){
- k2 += a[d];
- }
- else {
- cout << errors.p << endl << "Ошибка в строке: " << e << endl;
- m = 1;
- break;
- }
- }
- for(int x = 0; x < v_int.size(); x++){
- if(v_int[x] == k2){
- n = 1;
- break;
- }
- }
- if (n != 1){
- cout << "No right tip)" << endl;
- m = 1;
- break;
- }
- n = 0;
- }
- }
- g = 0;
- if(m == 1){
- break;
- }
- i = d;
- if(a[i] == ';'){
- break;
- }
- }
- if(m == 1){
- i = item_name.size();
- break;
- }
- i = d;
- }
- if (s1 == 0){
- cout << errors.l << endl << "Ошибка в строке: " << e << endl;
- }
- return(i);
- }
- void godalshe1(string &item_name){
- ifstream nameFile;
- nameFile.open("analizator.txt");
- int i, d, q = 0, c = 0, l = 0, k = 0, n = 0, s, e = 1, k1 = 0, k2 = 0, k3 = 0, k9 = 0;
- char h;
- string b;
- string first = "int";
- string second = "char";
- string third = "float";
- string fourth = "}";
- string obman = "struct";
- while(getline(nameFile, item_name)){
- item_name = eraseSpaces(item_name);
- string a = item_name;
- for (i = 0; i < item_name.size();i++) {
- for (s = 0; b[s] != '\0'; s++) {
- b[s] = '\0';
- }
- for (d = 0; a[d] != ' '; d++) {
- if (a[d] == '\0'){
- q = 1;
- break;
- }
- h = a[d];
- b[d] = h;
- }
- if (strcmp(first.c_str(), b.c_str()) == 0){
- if(q == 1){
- cout << errors.j << endl;;
- break;
- }
- i = proverkaint(item_name, d, e);
- k2 = 1;
- }
- q = 0;
- for (s = 0; b[s] != '\0'; s++) {
- b[s] = '\0';
- }
- for (d = 0; a[d] != ' '; d++) {
- if (a[d] == '\0'){
- c = 1;
- break;
- }
- h = a[d];
- b[d] = h;
- }
- if (strcmp(second.c_str(), b.c_str()) == 0){
- if(c == 1){
- cout << errors.k << endl;
- break;
- }
- i = proverkachar(item_name, d, e);
- k3 = 1;
- }
- c = 0;
- for (s = 0; b[s] != '\0'; s++) {
- b[s] = '\0';
- }
- for (d = 0; a[d] != ' '; d++) {
- if (a[d] == '\0'){
- l = 1;
- break;
- }
- h = a[d];
- b[d] = h;
- }
- if (strcmp(third.c_str(), b.c_str()) == 0){
- if(l == 1){
- cout << errors.n << endl;
- break;
- }
- i = proverkafloat(item_name, d, e);
- k1 = 1;
- }
- l = 0;
- for (s = 0; b[s] != '\0'; s++) {
- b[s] = '\0';
- }
- if (k2 == 1){
- for (int z = 0; a[z] != ' '; z++) {
- if (a[z] == '%'){
- i = proverkaprozent(item_name, e);
- k2=0;
- }
- }
- }
- break;
- }
- //сюда нужно проверку на повторяющиеся переменные
- e++;
- }
- nameFile.close();
- }
- int poisk_int()
- { string iteam_name;
- ifstream nameFileout;
- nameFileout.open("analizator.txt");
- string type="int ";
- string type_main="int main";
- string type_wrong="int int";
- int num_strok=0,j=0;
- int mass[20]={0};
- size_t found;
- while(nameFileout)
- {
- getline(nameFileout,iteam_name);
- num_strok++;
- for(int i=0;i<iteam_name.size();i++)
- {
- found=iteam_name.find(type);
- if(found==iteam_name.find(type_main))
- {
- found = -1;
- }
- if(found==iteam_name.find(type_wrong))
- {
- found=-2;
- printf("WRONG: peremenyi\n");
- return 1;
- }
- if (found!=string::npos) //==-1 string::npos
- {
- mass[j]=num_strok;
- j++;
- break;
- }
- }
- }
- int f=j;
- for(j=0;j<f;j++)
- {
- printf("number of strok int= %d\n",mass[j]);
- }
- nameFileout.close();
- return 0;
- }
- int poisk_()
- {
- string iteam_name;
- ifstream nameFileout;
- nameFileout.open("analizator.txt");
- return 0;
- }
- /*int poisk_1()
- {
- string iteam_name;
- ifstream nameFileout;
- string type="%";
- //string type_1="printf(%";
- int num_strok=0,j=0,t=0,mass[10];
- nameFileout.open("analizator.txt");
- while(nameFileout)
- {
- getline(nameFileout,iteam_name);
- num_strok++;
- for(int i=0;i<iteam_name.size();i++)
- {
- size_t found=iteam_name.find(type);
- if(found==iteam_name.find(type_1))
- {
- found = -1;
- }
- if (found != string::npos)
- {
- mass[j]=num_strok;
- j++;
- break;
- }
- }
- t=j;
- }
- for(j=0;j<t;j++)
- {
- printf("number of strok with= %d\n",mass[j]);
- }
- nameFileout.close();
- return 0;
- }
- */
- struct vars
- {
- char name[20];
- char mass[20];
- };
- void poisk_int2()
- { string iteam_name;
- ifstream nameFileout;
- nameFileout.open("analizator.txt");
- string type="int ";
- string type_=" ";
- string type_main="int main";
- size_t found;
- int flag=1;
- vars a;
- while(nameFileout)
- {
- getline(nameFileout,iteam_name);
- for(int i=0;i<iteam_name.size();i++)
- {
- found=iteam_name.find(type);
- if(found==iteam_name.find(type_main))
- {
- found = -1;
- }
- if (found != string::npos) //==-1
- {
- for(i=(found+4);i<iteam_name.size();i++)
- {
- if(iteam_name[i]==' '||iteam_name[i]=='\t')
- {
- iteam_name.erase(i,1); //delete 1 sumbhol из номера i
- i--;
- }
- }
- cout<<iteam_name<<endl;
- flag=0;
- }
- }
- }
- for(int i=0;i<iteam_name.size();i++)
- {
- found=iteam_name.find(type_);
- if(found!=string::npos)
- {
- while(iteam_name[i]!=',')
- {
- a.name[i]=iteam_name[i];
- }
- }
- }
- if(flag)
- {
- printf("WARNING:net int peremenyh\n");
- }
- nameFileout.close();
- }
- int pow()
- {
- /*string iteam_name;
- ifstream nameFileout;
- nameFileout.open("analizator.txt");
- char stroka[100];
- while(nameFileout)
- {
- getline(nameFileout,iteam_name);
- for(int i=0;i<iteam_name.size();i++)
- {
- stroka[i]=iteam_name[i];
- }
- for(int i=0;i<iteam_name.size();i++)
- {
- printf("%c",stroka[i]);
- }
- }
- nameFileout.close(); */
- return 0;
- }
- int main(int argc, char* argv[])
- {
- string item_name;
- int value;
- godalshe1(item_name);
- value=poisk_int();
- poisk_int2();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement