Dana Gorsuch Ответов: 1

Преобразование C++ в Python


#include <iostream>
#include <fstream>
#include <cstdlib>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <string>
#include <locale>

using namespace std;

unordered_set<string> keywords = {"if","then","else","begin","end"};
unordered_set<string> special = {"(",")","[","]","+","-","=",",",";"};
unordered_set<string> digit_set = {"0","1","2","3","4","5","6","7","8","9"};

bool isKeyword(string key) {
return keywords.find(key) != keywords.end();
}

bool isSpecial(string key) {
return special.find(key) != special.end();
}

bool isDigit(string key) {
return digit_set.find(key) != digit_set.end();
}

bool isChar(string key) {
return (key.length() == 1 && (key.at(0) >= 'A' && key.at(0) <= 'Z' && key.at(0) >= 'a' && key.at(0) <= 'z'));
}

bool isReal(string key) {
int found = key.find(".");
if(found != string::npos) {
string part1 = key.substr(0,found-1);
string part2 = key.substr(found+1,key.length());
if(isDigit(part1) && isDigit(part2))
return true;
}
return false;
}

int main(int argc, char *argv[]) {
if(argc < 2) {
cout << "Incorrect usage! use: ./tokenize filename.ext";
exit(-1);
}

ifstream fin;
fin.open(argv[1]);
unordered_map<string,vector<string>> symbol_table;
vector<string> keyword_vec, real_vec, special_vec, character_vec, digit_vec;
symbol_table["keyword"] = keyword_vec;
symbol_table["real"] = real_vec;
symbol_table["special"] = special_vec;
symbol_table["character"] = character_vec;
symbol_table["digit"] = digit_vec;

string temp;
while(fin) {
getline(fin,temp,' ');
if(isKeyword(temp))
symbol_table["keyword"].push_back(temp);
else if(isReal(temp))
symbol_table["real"].push_back(temp);
else if(isSpecial(temp))
symbol_table["special"].push_back(temp);
else if(isChar(temp))
symbol_table["character"].push_back(temp);
else if(isDigit(temp))
symbol_table["digit"].push_back(temp);
}
fin.close();
cout << "\n-----File Summary------";
cout << "\n-----------------------";
cout << "\nKeywords : \t" << symbol_table["keyword"].size();
cout << "\nReal Values : \t" << symbol_table["real"].size();
cout << "\nSpecials : \t" << symbol_table["special"].size();
cout << "\nCharacters : " << symbol_table["character"].size();
cout << "\nDigits : " << symbol_table["digit"].size();
return 0;
}


Что я уже пробовал:

Есть ли способ преобразовать это в язык Python

Rick York

Да. Просить нас сделать это для вас-это не то.

Dana Gorsuch

Я никого не просил делать это за меня. Я сам искал ресурсы, чтобы помочь его преобразовать. В любом случае спасибо за помощь. Просто начинающий студент здесь пытается чему-то научиться.

Rick York

Google и DuckDuckGo-это лучшие ресурсы для поиска, чем спрашивать людей на форуме. Вопрос на форуме подразумевает либо:) вы не знаете, как искать, потому что иначе зачем бы вам ждать ответа больше часа или дольше, вместо того чтобы получить его за пять секунд? или б:) вы на самом деле просите кого-то сделать это за вас.

Я честно не могу понять, как и почему было бы лучше задать этот вопрос на форуме, а не в поисковой системе. Может быть, это только я. Иногда я бываю туповат.

Однако тот факт, что вы включили код, указывает на то, что ваш ответ неискренен. Если вы просто просили ресурсы, то код не имеет значения. Другими словами - Я не куплюсь на это ни на секунду.

1 Ответов

Рейтинг:
1

CPallini

Перевод такого кода в Python это не очень сложно, вы можете сделать это сами, обретя озарение.
Попробуйте разместить здесь конкретные вопросы, когда вы застряли.