代币和语法

时间:2018-05-06 12:01:44

标签: c++ parsing token grammar

阅读编程:使用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获得上述语法的。我知道我们需要为这个程序设置一个规则,以便在+和 - 之前评估*,/和()。但是上面的树如何实现呢?

0 个答案:

没有答案