【发布时间】:2016-03-29 13:13:28
【问题描述】:
我正在用我的编程语言编写一个翻译器,这是一种简单的 C++,我对解析一行有疑问。在 C++ 中,我们将一些对象定义为:
class Item{
string Item;
string Item2;
};
我想使用关键字add 以我的语言创建相同的对象:
add "Item Item", "Item2 Item2";
如您所见,string 变量“Item*”可能是带有空格的行。
但我需要解析它并制作一个数组命令堆栈。在示例中,我想解析该行以生成 3 的数组,如下所示:[add, Item Item, Item2 Item2]。所以,我需要保存“Item Item”之间的空格并在解析时将其计为一个字符串行,但仍然使用空格作为add和第一个“Item*”之间的分隔符。我该怎么做?
【问题讨论】:
-
计算开盘价和收盘价。如果引号打开,则空格会附加到最后一个字符串。如果引号未打开,则空格是分隔符并被跳过。
-
将其作为单行读取(使用例如
std::getline)然后您必须以其他方式解析字符串。删除第一个空格分隔的单词和终止分号应该很容易。然后在逗号处拆分其余部分,并删除每个字符串引号。 -
试试 Boost.Spirit。它肯定对你有帮助。
-
<iomanip>标头现在具有操纵器std::quoted() -
另外,如果你想创建自定义语言,我认为你应该阅读 bison/flex 或一些类似的工具。 Yacc/lex 或 bison/flex 非常强大,一旦你了解了结构,使用起来很有趣。
标签: c++ arrays string parsing delimiter