sintaxico.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "sintaxico.hh"
  2. void Sintaxico::check(std::string str){
  3. if (std::regex_search(str, m, std::regex ("inteiro\\s+[A-Za-z]+\\s+=\\s+[0-9]+\\;|inteiro\\s+[A-Za-z]+\\;"))){
  4. //
  5. } else if (std::regex_search(str, m, std::regex("flutuante\\s+[A-Za-z]\\s+=\\s+[0-9]*\\.[0-9]+;|flutuante\\s+[A-Za-z];|flutuante\\s+[A-Za-z]\\s+=\\s+[0-9]+;"))){
  6. //
  7. } else if (std::regex_search(str, m, std::regex("banana\\s+[A-Za-z]+;|banana\\s+[A-Za-z]+\\s+=\\s+\"[^\"]*\";"))){
  8. //
  9. } else if (std::regex_search(str, m, std::regex("se\\s+\\([^)]*\\)\\s+\\{[^}]*\\}\\s+senao\\s+\\{[^}]*\\}"))){
  10. //
  11. } else if (std::regex_search(str, m, std::regex("se\\s+\\([^)]*\\)\\s+\\{[^}]*\\}"))){
  12. //
  13. } else if (std::regex_search(str, m, std::regex("enquanto\\s+\\([^)]*\\)\\s+\\{[^}]*\\}"))){
  14. //
  15. } else if (std::regex_search(str, m, std::regex("^para\\s+\\(inteiro\\s+[A-Za-z]+\\s+=\\s+[0-9]+;\\s+[A-Za-z]+\\s+<\\s+[0-9]+;\\s+[A-Za-z]+\\+\\+\\)\\s+\\{[^}]*\\}$"))){
  16. //
  17. } else if (std::regex_search(str, m, std::regex("digitar\\s+\\([A-Za-z0-9]+\\)\\;"))){
  18. //
  19. } else if (std::regex_search(str, m, std::regex("imprimir\\s+\\([^)]*\\)\\;"))){
  20. //
  21. } else if (std::regex_search(str, m, std::regex("[A-Za-z]+\\s+=\\s+[0-9]+;"))){
  22. //
  23. } else if (std::regex_search(str, m, std::regex("[A-Za-z]+\\s+=\\s+[0-9]*\\.[0-9]+;"))){
  24. //
  25. } else if (std::regex_search(str, m, std::regex("[A-Za-z]+\\s+=\\s+\"[^\"]*\""))){
  26. //
  27. } else if (str == ""){
  28. //
  29. } else {
  30. this->b.push_back(false);
  31. std::cout << "\nErro de sintáxe" << std::endl;
  32. }
  33. }
  34. Sintaxico::Sintaxico(){
  35. std::ifstream file("input.txt");
  36. std::string line;
  37. while(getline(file, line)){
  38. check(line);
  39. }
  40. if(!count(b.begin(), b.end(), false)){
  41. semantico = new Semantico();
  42. }
  43. }
  44. Sintaxico::Sintaxico(std::string str){
  45. check(str);
  46. if(!count(b.begin(), b.end(), false)){
  47. semantico = new Semantico(str);
  48. }
  49. }
  50. std::string Sintaxico::getCode(){
  51. return semantico->getCode();
  52. }
  53. bool Sintaxico::getBool(){
  54. if(count(b.begin(), b.end(), false)){
  55. return false;
  56. } else {
  57. return semantico->getBool();
  58. }
  59. }