如何用C ++编写一个简单的解释器?

时间:2015-10-09 06:31:46

标签: c++ interpreter

如何在C ++中为一个简单的语言编写一个简单的解释器,它将.txt文件作为输入并运行它。

**仅适用于+ - / * out个函数**

输入(源代码):

int a,b,c;
a=2;
b=4;
c=a+b;
out c;

译员输出:

6

我怎么能这样做?任何帮助或源代码表示赞赏。

对不起,如果你没有得到我的问题,我的英语太糟糕了。只需忽略"口译员"一秒钟我想用C ++编写一个控制台程序,它将一个txt文件作为源代码,并识别基本数学和" out"命令。是否有可能在C ++中?

1 个答案:

答案 0 :(得分:2)

口译员通常分三步进行:

<强>词汇 识别特定的简单shemes,如关键字,数字,符号等。标准方法是为每个词法分析器定义正则表达式。外面有明确定义的算法来转换状态机中的reg-exp,因此您可以识别输入中的任何工作。

这是由:

  • 从每个regexp创建一个状态机
  • 加入所有状态机
  • 使状态机确定性
  • 使状态机最小化。

<强>语法 在这一部分中,您将词法分析器的序列作为输入并使用它们创建树。根据语言的复杂程度,有不同的类型:top-&gt; down或down-&gt; top。 (谈及LR,LL,LALR等)

file
|...
|- c=a+b
|  |- a+b
      |- a
      |- +
      |- b
   |- =
   |-c

<强>语义 通过您的树进行操作,例如在a + b中,您获得a,b并将它们相加,然后返回上述节点,并将值设置为c。

最后说明: 小心从开始设计强大的错误/警告机制:错误类型,完整描述,检测到错误的行和字符,错误/警告级别等。

此外,为每个节点提供解析的输入(字符串),解释的内容(LEX_NUMBER)和解释的值(4)可能会很有趣。