Tranvick

CPP_2_1

Dec 1st, 2014
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. +#include <iostream>
  2. +#include <string>
  3. +
  4. +using std::cin;
  5. +using std::string;
  6. +
  7. +namespace FiniteAutomata {
  8. +
  9. +    const char keySymbols[] = "'\"\\/*\n";
  10. +    const int keySymbolsCount = 6;
  11. +    const int DEFAULT_EVENT = 6;
  12. +    const int transitionTable[9][7] = {
  13. +        {3, 4, 0, 1, 0, 0, 0},
  14. +        {0, 0, 0, 5, 6, 0, 0},
  15. +        {6, 6, 6, 0, 2, 6, 6},
  16. +        {0, 3, 7, 3, 3, 3, 3},
  17. +        {4, 0, 8, 4, 4, 4, 4},
  18. +        {5, 5, 5, 5, 5, 0, 5},
  19. +        {6, 6, 6, 6, 2, 6, 6},
  20. +        {3, 3, 3, 3, 3, 3, 3},
  21. +        {4, 4, 4, 4, 4, 4, 4}
  22. +    };
  23. +
  24. +    string makeTransition(int & state, char previousCharacter, char currentCharacter) {
  25. +        string result;
  26. +
  27. +        int eventNumber = DEFAULT_EVENT;
  28. +        for (size_t i = 0; i < keySymbolsCount; ++i) {
  29. +            if (currentCharacter == keySymbols[i]) {
  30. +                eventNumber = i;
  31. +                break;
  32. +            }
  33. +        }
  34. +
  35. +        int newState = transitionTable[state][eventNumber];
  36. +
  37. +        switch (state) {
  38. +        case 0:
  39. +            if (newState != 1) {
  40. +                result += currentCharacter;
  41. +            }
  42. +            break;
  43. +        case 1:
  44. +            if (newState != 5 && newState != 6) {
  45. +                result += previousCharacter;
  46. +                result += currentCharacter;
  47. +            }
  48. +            break;
  49. +        case 3:
  50. +        case 4:
  51. +        case 7:
  52. +        case 8:
  53. +            result += currentCharacter;
  54. +            break;
  55. +        case 5:
  56. +            if (newState == 0) {
  57. +                result += currentCharacter;
  58. +            }
  59. +            break;
  60. +        }
  61. +        state = newState;
  62. +
  63. +        return result;
  64. +    }
  65. +
  66. +    string removeComments(const string & source) {
  67. +        string result;
  68. +
  69. +        int state = 0;
  70. +        for (size_t index = 0; index < source.length(); ++index) {
  71. +            char currentCharacter = source[index];
  72. +            char previousCharacter = 0;
  73. +            if (index > 0) {
  74. +                previousCharacter = source[index - 1];
  75. +            }
  76. +            result += makeTransition(state, previousCharacter, currentCharacter);
  77. +        }
  78. +
  79. +        return result;
  80. +    }
  81. +
  82. +}
  83. +
  84. +string sourceInput() {
  85. +    string result;
  86. +    int nextCharacter = cin.get();
  87. +    while (!cin.eof()) {
  88. +        result += (char)nextCharacter;
  89. +        nextCharacter = cin.get();
  90. +    }
  91. +    return result;
  92. +}
  93. +
  94. +
  95. +
  96. +
  97. +
  98. +int main() {
  99. +    std::ios_base::sync_with_stdio(false);
  100. +    string source = sourceInput();
  101. +    std::cout << FiniteAutomata::removeComments(source);
  102. +    return 0;
  103. +}
Advertisement
Add Comment
Please, Sign In to add comment