2011-04-25 28 views
1

我正在寻找一种方式来标记一个字符串,并产生令牌和令牌类型的列表。在我浪费我的努力之前,我想知道boost是否已经能够做到我想要的。记号化文本类型,字符串对

我想要一个签名的功能基本上是这样的:

typedef pair<size_t,string> token; 
void tokenize(string input, vector<regex> match, vector<token> & output); 

input是文本输入进行标记化。 match是表示令牌的所有正则表达式的列表。 output将成为所有匹配的令牌与来自match矢量匹配令牌的索引一起列表。

我知道如何使用sregex_token_iterator但我想以某种方式避免对所有的令牌做重复的匹配。也就是说,我可以生成一个令牌列表,但它们缺少类型信息,我希望获取该类型信息而不重新匹配每个令牌。

对于工具链和集成简单起见,我宁愿坚持使用升压regex库,而不是使用一个单独的工具(如ANTLR)。

回答

1

您描述的场景正好是的域名为BoostSpiritQi

+0

我带你去看看。实际上我只是在寻找一个分词器而不是一个完整的语法分析器。 – 2011-04-25 17:52:23

+0

看起来更像Spirit.Lex是我想要的。我会检查一下。 – 2011-04-25 17:54:09

+0

@ edA-qa mort-ora-y:既然如此,我会用Spirit.Lex编写tokenizer,然后通过Spirit.Qi语法将其暴露。 – ildjarn 2011-04-25 17:54:59