在 Bjarne Stroustrup 的《使用 C++ 编程原理与实践》一书中,他解释了如何使用标记来阻止 C++ 自动使用简单计算器上的运算顺序。他在书中给出的代码不起作用 - 要么是因为我的愚蠢,要么是因为我遗漏了一些东西。我知道令牌本质上是将代码行分解为字符。例如,如果我有 5 * 3,则有 3 个令牌。两个值和一个字符。我不知道如何合并令牌,也不知道为什么我们应该使用它们。 Bjarne 的用户定义令牌示例如下:
class Token {
public:
char kind; // what kind of token
double value; // for numbers - a value
Token(char ch) // make a token from a char using a constructor
:kind(ch), value(0) {} // set kind to ch and value to val
Token(char ch, double val) // make a Token from a char and a double
:kind(ch), value(val) {}
};
此外,他还提供了如何将输入读取到标记向量中的示例:
Token get_token() {} // read a token from cin
vector<Token> tok; // put the tokens in this vector
while(cin >> t5) {
Token t5 = get_token();
tok.push_back(t5);
}
return 0;
首先...... 1)他对“get_token()”函数进行了原型设计,但他甚至没有为其编写任何代码。 2) 令牌的对象“t5”在 while 循环中被读取后正在初始化。 3)我尝试了很多方法让cin读取t5的输入,但它不起作用。我什至在 while 循环之前定义了 t5,并且我收到“>>”的无效操作数错误。这是这本书中我第一次完全陷入困境。我在网上找不到任何关于如何在 C++ 中使用标记来编写程序的示例,我只能得到关于标记是什么的模糊定义。如果有人可以帮助我理解代币,或者可能为我指出一个可以得到全面解释的好来源,我将不胜感激。
首先,Stroustrup 并不是一位伟大的老师,如果您正在学习编程,您可能最好从 C++ 以外的地方开始,从他的书以外的地方开始。
为了解决你的问题,标记是一个词汇元素,并且准确地说what这取决于您正在解决的问题。例如,如果您正在处理算术表达式:
100+2/3
那么标记将为“100”、“+”、“2”、“/”和“3”。另一方面,如果您正在处理英文文本:
"Here we go again"
那么令牌可能是:
"Here", "we", "go", "again"
我们只需丢弃空格字符即可。
如何“使用代币”?好吧,假设您想编写一个拼写检查器 - 您需要将文本分解为单词和标点符号(不同类型的标记),可能会丢弃大多数标点符号,然后在某种字典中查找单词标记。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)