像其他语言的PHP那样的解析器令牌?

时间:2013-09-25 06:38:42

标签: java php c++ ruby token

简短版本:

在其他解释语言(Python,Ruby等)和编译语言(C系列,Java等)中是否存在与PHP parser tokens类似的东西?

长版:

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

enter image description here

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

迄今为止的调查结果:

2 个答案:

答案 0 :(得分:1)

所有解析器都将输入转换为令牌。语言可能会也可能不会显示这些令牌是什么,当然,令牌的实际含义和名称也各不相同,当然,由于不同的语言有不同的语法,保留字和其他结构,每种语言都会略有不同不同的令牌集。

此处的标记只是“语言规范中实际符号的命名表示”。例如,解析器会将单词break视为输入,并将其设置为令牌T_BREAK

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

答案 1 :(得分:-1)

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

在Ruby中,例如,墨尔本(Rubinius使用的解析器)使用了一组非常不同的令牌,而不是RedParse / RubyLexer(被各种项目使用),它们再次使用一组非常不同的令牌,而不是基于ANTLR的令牌。 XRuby和Sapphire在Steel中使用的解析器。