Interpreter

#include <string>
#include <iostream>
#include <stack>

using namespace std;

stack<char> g_stack;

class Context
{
public:
    void SetExpression(string sExpr) { m_sExpr = sExpr; }
    string GetExpression() const { return m_sExpr; }

private:
    string m_sExpr;
};

class Interpreter
{
public:
    virtual void Translate(const Context& context)=0;
};

class ConcreteInterpreterA : public Interpreter
{
public:
    void Translate(const Context& context);
};

class ConcreteInterpreterB : public Interpreter
{
public:
    void Translate(const Context& context);
};

void ConcreteInterpreterA::Translate(const Context& context)
{
    size_t len = context.GetExpression().size();

    if (len == 0 || len % 2 != 0)
    {
        cerr<<"TranslateA failed! mismatch brackets"<<endl;
    }
    else
    {
        cout<<"TranslateA go through!"<<endl;
    }
}

void ConcreteInterpreterB::Translate(const Context& context)
{
    while (!g_stack.empty()) g_stack.pop();

    string sExpression = context.GetExpression();
    for (unsigned int i = 0; i < sExpression.size(); i++)
    {
        if (sExpression[i] == ‘(‘) g_stack.push(sExpression[i]);
        else if (sExpression[i] == ‘)‘)
        {
            if (g_stack.size() == 0 || g_stack.top() != ‘(‘)
            {
                cerr<<"TranslateB failed! mismatch brackets"<<endl;
                return ;
            }
            else g_stack.pop();
        }
        else
        {
            cout<<"TranslateB failed! invalid character in expression"<<endl;
            return ;
        }
    }

    if (g_stack.size() != 0)
    {
        cerr<<"TranslateB failed! mismatch brackets"<<endl;
    }
    else
    {
        cout<<"TranslateB go through!"<<endl;
    }
}

int main(int argc, char *argv[])
{
    Interpreter* pInterpreterA = NULL, *pInterpreterB = NULL;
    Context context;

    pInterpreterA = new ConcreteInterpreterA;
    pInterpreterB = new ConcreteInterpreterB;

    context.SetExpression("");
    pInterpreterA->Translate(context);
    pInterpreterB->Translate(context);

    context.SetExpression("(()");
    pInterpreterA->Translate(context);
    pInterpreterB->Translate(context);

    context.SetExpression("(())");
    pInterpreterA->Translate(context);
    pInterpreterB->Translate(context);

    context.SetExpression("(())()");
    pInterpreterA->Translate(context);
    pInterpreterB->Translate(context); 

    delete pInterpreterA;
    delete pInterpreterB;

    return 0;
}
时间: 2024-12-16 04:53:50

Interpreter的相关文章

Invoking the Interpreter 之 Argument Passing

当学会了python的解释器之后,那么脚本名称其后(thereafter)附加的参数信息则会转变(turn into)成为一个字符串列表,然后传递给python中的 sys 模块里的 argv 变量.你可以访问这个参数列表,通过执行下面的代码: import  sysy 那么要求是这个参数的列表中的元素至少(at  least)有一项.当没有传递脚本名称,同时也没有传递参数的时候,那么 sys 模块中的 sys.agrv[0] 这个变量的值将会是空.当脚本的名称被指定为"-"的时候意味

在eclipse中首次新建项目的时候,出现Project interpreter not specified

在eclipse中首次新建项目的时候,出现Project interpreter not specified(大致可以理解为:没有执行的项目编译者) 原因就是安装了pydev之后,我们的python还没有安全的跟eclipse相结合起来,需要添加python的编译环境等 解决方案: 点击eclipse——>window——>pydev ——>python Interpreter——>new——>添加python的安装目录即可 在eclipse中首次新建项目的时候,出现Proj

修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题

1.在64系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可 yum install glibc.i686 2.error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory yum install zlib.i686

linux 出现bash: ****: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

误删除glibc-2.12-1.192.el6.x86_64 rpm 包,导致整个系统的所有命令(cd 除外)都不能用. 使用命令出现如下提示: bash: /bin/cp: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory bash: /bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or direc

[工作中的设计模式]解释器模式模式Interpreter

一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我很少附上类图,但解释器模式确实比较抽象,为了便于理解还是放了上来,此模式的要点是: 1.客户端提供一个文本.表达式或者其他,约定解析格式 2.针对文本中可以分为终结符表达式和非终结符表达式, 3.终结符表达式无需进一步解析,但仍需要转化为抽象接口的实例 4.针对非终结表达式,没一种标示需要定义一种解

shell脚本执行时报&quot;bad interpreter: Text file busy&quot;的解决方法

在执行一个shell脚本时,遇到了"-bash: ./killSession.sh: /bin/bash: bad interpreter: Text file busy"错误提示,如下所示: [[email protected] bin]$ ./killSession.sh      -bash: ./killSession.sh: /bin/bash: bad interpreter: Text file busy 此时只需要在#!/bin/bash,加一空格#! /bin/bas

/lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录

[[email protected] client]# export PATH=/opt/crosstool/mipsel-linux/bin/:$PATH 查看是否配好 [[email protected] client]# env PATH=/opt/crosstool/mipsel-linux/bin/ [[email protected] client]# mipsel-linux-gcc -o a a.c bash: /opt/crosstool/mipsel-linux/bin/mi

OpenCASCADE Expression Interpreter by Flex &amp; Bison

OpenCASCADE Expression Interpreter by Flex & Bison [email protected] Abstract. OpenCASCADE provide data structure of any expression, relation or function used in mathematics. Flex and Bison are tools for building programs that handle structured input

编译php时,出错bad interpreter

安装php,参数有--with-apxs2.出现错误bad interpreter,原因是apache的apxs的文件需要perl的支持,首先要安装perl,然后修改apxs第一行,把第一行的#!/replace/with/path/to/perl/interpreter -w替换为#!/usr/bin/perl -w,这个是perl的位置,请根据自己的安装位置修改.

转载的,刚装完 PyCharm , 却遇到“No Python interpreter selected”该怎么办

Your problem probably is that you haven't installed python. Meaning that, if you are using Windows, you have not downloaded the installer for Windows, that you can find on the official Python website. In case you have, chances are that PyCharm cannot