阅读编程:使用C ++的原理和实践。在第6章中,我们创建了一个计算器,并使用标记逐个识别等式中的每个字符。然后我们使用语法为每个元素设置规则(我相信?)。现在这两个我都不理解。他在没有正确解释的情况下跳过了一些文本,并认为你只是得到了#34;这是怎么回事。或者我错过了什么。
令牌:
所以我明白我们"分裂"或者标记化?每个元素都可以单独评估。但我不明白它们是如何创建的?
以下是他们的例子:
class Token {
public:
char kind;
double value;
};
所以从我的理解是。我们创建了一个名为Token的类。我们把它公之于众。然后在这个类中我们定义2个变量kind和value。接下来我们初始化下面的变量?
Token t; // t is a Token
t.kind = '+'; // t represents a +
Token t2; // t2 is another Token
t2.kind = '8'; // we use the digit 8 as the “kind” for numbers
t2.value = 3.14;
所以我对令牌的问题是。为什么价值观' +',' 8'和3.14?它们可能是什么,或者它有8个原因吗?为什么价值3.14?可以说是' - ',或者' *'等?
语法:
所以我现在已经知道语法可以用我想要的任何术语来定义,但是阅读下面的语法对我来说并没有意义。
// a simple expression grammar:
Expression:
Term
Expression "+" Term // addition
Expression "–" Term // subtraction
Term:
Primary
Term "*" Primary // multiplication
Term "/" Primary // division
Term "%" Primary // remainder (modulo)
Primary:
Number
"(" Expression ")" // grouping
Number:
floating-point-literal
有人可能想出一个更小的例子。我不明白他是如何从45 + 11.5 / 7获得上述语法的。我知道我们需要为这个程序设置一个规则,以便在+和 - 之前评估*,/和()。但是上面的树如何实现呢?