Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /**####CLASE STACK ****/
- #include <stack>
- template <class Tipo>
- class Stack : private stack<Tipo> {
- public:
- void push(Tipo _valor) {
- stack<Tipo>::push(_valor);
- }
- Tipo pop() {
- Tipo temp = stack<Tipo>::top();
- stack<Tipo>::pop();
- return temp;
- }
- bool empty () {
- return stack<Tipo>::empty();
- }
- /**Metodos Miembros*/
- int contar();
- };
- template <class Tipo>
- int Stack<Tipo>::contar() {
- int cuantos = 0;
- while (!this->empty()) {
- this->pop();
- cuantos ++;
- }
- return cuantos;
- }
- bool esSintaxisValidaSimple(string cadena){
- Stack<char> s;
- bool bEsValido = true;
- char caracterActual;
- for(unsigned int i=0; i < cadena.size(); i++){
- caracterActual = cadena[i];
- if(caracterActual == '(')
- s.push(caracterActual);
- else if(caracterActual == ')') {
- //si tengo bloque de cierre y no tengo datos de entrada es inválido
- if(s.empty())
- bEsValido = false;
- else if(caracterActual == ')' && s.pop() != '(') //busco equivalencia de simbolos de llaves
- bEsValido = false;
- }
- }
- if(!s.empty())
- bEsValido = false;
- return bEsValido;
- }
- bool esSintaxisValida(string cadena){
- Stack<char> s;
- bool bEsValido = true;
- for(unsigned int i=0; i < cadena.size(); i++){
- if(cadena[i] == '(' || cadena[i] == '{' || cadena[i] == '[')
- s.push(cadena[i]);
- else if(cadena[i] == ')' || cadena[i] == '}' || cadena[i] == ']') {
- if(s.empty())
- bEsValido = false;
- else {
- char t = s.pop();
- //busco equivalencia de simbolos de llaves
- if( (cadena[i] == ')' && t != '(')
- ||(cadena[i] == '}' && t != '{')
- ||(cadena[i] == ']' && t != '['))
- bEsValido = false;
- }
- }
- }
- if(!s.empty())
- bEsValido = false;
- return bEsValido;
- }
- int main()
- {
- /*(A)
- (A)*[B]
- ((A)*[B]}
- (A+B)
- (A+B+C)
- (A+B+C)+{a-c}
- (A+B+C)+{a-c}*[Z]
- (A+{B+C})+{a-c}*[Z]{
- (A+{B+C})+{a-[c]}*[Z]
- 7-((x*((x + y)/ (j - 3)) + y) / (4 - 5/2))
- 7-((x*((x + y)/ ((j - 3)) + y) / (4 - 5/2))*/
- string cadena = "(A+{B+C})+{a-[c]}*[Z]";
- if(esSintaxisValida(cadena))
- cout <<"es valida ("<<cadena<<")";
- else
- cout <<"es invalida ("<<cadena<<")";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement