【问题标题】:Parser tokens like those in PHP in other languages?像其他语言中的 PHP 那样的解析器令牌?
【发布时间】:2013-09-25 06:38:41
【问题描述】:

短版:

在其他解释语言(Python、Ruby 等)和编译语言(C 家族、Java 等)中是否有类似于 PHP parser tokens 的内容?

加长版:

the CPP Rocks website 上有an article showing a visual comparison of language complexity,通过图表将语言的各种构建块分解为类别。 Coffeescript 的图表如下所示:

我想以the parser tokens 为起点为 PHP 制作这样一个图表(以确保我不会错过任何东西,因为我很懒惰)。我想知道在其他解释语言(Python、Ruby 等)和编译语言(C 系列、Java 等)中是否存在与这些标记类似的东西。

目前的调查结果:

【问题讨论】:

    标签: java php c++ ruby token


    【解决方案1】:

    所有解析器都将输入变成标记。语言可能会或可能不会显示这些标记是什么,当然,标记的实际含义和名称会有所不同,当然,由于不同的语言有不同的语法、保留字集和其他结构,每种语言都会有一个稍微不同的令牌集。

    这里的标记只是“语言规范中实际符号的命名表示”。例如,解析器会将单词break 视为输入,并将其转换为标记T_BREAK

    对于您正在查看的图表类型,您需要知道不同的语言结构是什么,对它们进行分类,然后以图形方式显示它们——我不确定查看标记列表是实现这一目标的最佳方式。

    【讨论】:

    • 我正在考虑使用诸如令牌列表之类的东西(对于我不太熟悉的语言)来找出有什么/多少种语言结构。我也不确定这是否是 最好的 方法,但我真的可以想到另一种方法,除了对我想要绘制的每种语言进行广泛的研究。 -- 当然,token 列表只是一个起点,我仍然需要手动对其进行分类。
    【解决方案2】:

    没有一种语言的标记列表这样的东西。标记是解析器的属性(更准确地说:它们是词法分析器和解析器之间接口的属性),而不是语言。解析相同语言的不同解析器可能使用完全不同的标记集。许多现代解析器都是无词法分析器的,这意味着它们根本没有标记

    例如,在 Ruby 中,Melbourne(Rubinius 使用的解析器)使用的标记集与 RedParse/RubyLexer(各种项目使用)完全不同,RedParse/RubyLexer 再次使用与基于 ANTLR 的分析器完全不同的标记集XRuby 和 Sapphire 在 Steel 中使用的解析器。

    【讨论】:

    • 也许我的术语有误,我会尝试解决它。 (欢迎提出建议)。对于解释语言,我要查找的是解释器知道/查找的内容的列表,以及编译器查找的编译语言的列表。在 PHP 中,它们被记录为令牌。我不知道它们是如何/是什么,或者在其他语言中被称为,因此我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多