【问题标题】:tokens and file streams令牌和文件流
【发布时间】:2011-12-28 01:36:47
【问题描述】:

我研究对文件流进行操作的程序的源代码(用 C++ 编写)。但是我时不时地偶然发现一个叫做tokens的东西。您能否向我解释一下,代币有什么作用以及它们为什么有用?谢谢。

【问题讨论】:

    标签: c++ stream filestream token


    【解决方案1】:

    Stream 是指随着时间的推移可用的数据元素序列。流中的数据元素可以是任何类型的:字符、字符串、特殊用途的数据结构等。文本文件可以简单地解释为字符流。

    在编程语言的上下文中,token这个词通常指的是来自字符流的一个或多个相关字符的序列。令牌在字符流之上提供了一定程度的抽象,并且它们本身通常被分组在流中以供进一步处理。

    编程语言编译器中通常的处理顺序是从词法分析器将字符流转换为标记流,然后将其传递给解析器。令牌的典型表示由类型指示符和令牌内容组成。

    这是一个例子:考虑这个 C++ 程序片段:

    class MyClass {
    public:
        string name;
    };
    

    词法分析器将此程序分组为包含十个标记的流:

    'class' (keyword)
    'MyClass' (identifier)
    '{' (opening brace)
    'public' (keyword)
    ':' (colon)
    'string' (identifier)
    'name' (identifier)
    ';' (semicolon)
    '}' (closing brace)
    ';' (semicolon)
    

    【讨论】:

    • 你少了一个分号(我希望不是故意的)。
    【解决方案2】:

    代币可以被认为是“占位符”。令牌代表一个特定的实体(字符串),通常是两个等价物之间的某种中间步骤。例如,标记通常用于表示给定语言语法的解析器中。

    【讨论】:

    • 所以它是一个抽象概念,而不是某种语言特定的特征,对吧?
    • @Abdulali 确实,这不是语言功能。一个文档由许多标记组成,一个标记是最小的有意义的单元:通常是一个完整的单词、分隔符等。 “123 + 456”可以用标记“123”、“+”和“456”来表示。
    • 是的,完全正确。回到我的解析器示例;解析器的第一阶段是“词法分析器”(词法分析器),它将标记分配给传入的语法。令牌是任意的,并且是专门为稍后要对其执行的任务而选择的。需要的“细节”越多,定义的令牌类型就越多。
    猜你喜欢
    • 2020-01-09
    • 2021-08-23
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2013-07-02
    • 2017-07-18
    • 2021-04-30
    相关资源
    最近更新 更多