【问题标题】:C++ Interpreter/ShellC++ 解释器/外壳
【发布时间】:2015-02-06 20:17:07
【问题描述】:

我问这个问题主要是因为我很好奇。

主要是为了好玩,我正在尝试用 C++ 开发一个基本的解释器和 shell。现在,我已经开发了一个基本的 shell - 我可以CDdir 等等,我问这个主要是为了学习。 :)

作为解释器的一部分,我想保存用户声明的变量。即:param x = 'siosidf';param x = 5;

我还希望能够进行纯计算,即72*3223 + 82 * 2 应输出2304187,recpectivley。

请注意,我还希望能够将运算符应用于变量,如下所示:

param x = 72;

x = x + 23;

print x;

需要输出95

我的问题分为两部分:

首先,您将如何(不必是实际代码,但如果您这样做,请在 C++ 中进行 :))实现变量保存系统? (还请解释原因,因为我这样做是为了学习。:))

第二,你将如何区分不同的计算/声明/调用并有效地以各种不同的形式执行它们? (空格,例如 72*8372 * 83。)

【问题讨论】:

  • 您可能想找到一本关于编写口译员的好书或课程。
  • 这是一个整洁的项目,但是这个问题不是 StackOverflow 常见问题类型的问题 :(
  • @MooingDuck 为什么会这样?这真的是关于编程和概念的,我认为......如果它不适合这里,我应该在哪里问它?
  • @A.Abramov “为什么会这样?” 因为它对于可能的解决方案来说太宽泛了。您可以使用例如std::map<std::string,int> 用于保存变量值,但会有很多更好、更通用的解决方案可用。
  • @glennjackman - 这看起来更像是一个实现问题,最好在 StackOverflow 上回答。

标签: c++ string shell interpreter


【解决方案1】:
  1. 使用地图。
  2. 使用解析器。 Boost.Spirit 将是一个不错的选择。

【讨论】:

  • 我写了一个冗长的答案,但这总结了它。 Boost Spirit 易于使用并且可以胜任,但要成为老派,您也应该考虑 flex 和 bison。无论如何,@StenSoft 的这个答案是正确的。
  • 听起来都是好主意;但是,这个项目不是针对产品的;我想自己实现解析器。如果没有其他人回答,我会在一小时内将此标记为答案。谢谢你:)
  • @A.Abramov 如果你真的想自己实现解析器,你需要这个:The dragon book 这是编译器的圣经。但请注意:它非常先进。不适合初学者或中级。尽管您只需要其中的一些章节。主要是 LL 和/或 LR 解析器。
  • 如果你想自己实现,可以考虑查看this answer
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多