Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <limits>
- char ch;
- bool error_c = 0;
- void Read();
- void Expression();
- void Radical();
- void Natural();
- void Number();
- void TryRead();
- void Error();
- int main() {
- while (true) {
- TryRead();
- if (!error_c) {
- std::cout << "Parsing complete!\n";
- }
- }
- return 0;
- }
- void Expression() {
- if (error_c) return;
- if ((ch == 'V') || (ch == '{')) {
- Radical();
- Expression();
- }
- else if (ch == '(') {
- Read();
- Expression();
- if ((ch == '+') || (ch == '-')) Read(); else { Error(); return;}
- Expression();
- if (ch == ')') Read(); else { Error(); return; }
- }
- else if ((ch > '0') && (ch <= '9')) {
- Natural();
- } else {Error(); return;}
- }
- void Radical() {
- if (ch == 'V') Read();
- else if (ch == '{') {
- Read();
- Natural();
- if (ch == '}') Read(); else {Error(); return;}
- if (ch == 'V') Read(); else {Error(); return;}
- } else Error();
- }
- void Natural() {
- if ((ch > '0') && (ch <= '9')) Read(); else Error();
- Number();
- }
- void Number() {
- if ((ch >= '0') && (ch <= '9')) {
- Read();
- Number();
- }
- }
- void Error() {
- std::cout << "Error parsing expression!\n";
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- std::cin.clear();
- error_c = 1;
- }
- void TryRead() {
- error_c = 0;
- std::cout << "Enter expression (it should end with '.' e.g. \"1234.\" is valid expression): ";
- std::cin >> ch;
- Expression();
- }
- void Read() {
- std::cin >> ch;
- }
Advertisement
Add Comment
Please, Sign In to add comment