如何从 R 中实现的 R 代码创建令牌

How to create tokens from R code implemented in R

这是代码:

aggregate(results ~ school, FUN = table, data = df)

上面的代码是用R语言写的,R语言有没有提取token的工具所以上面变成:

FUNC_NAME(DATA ~ DATA, PARA_FUN = DATA, PARA_DATA = DATA)

我尝试 minilexer 将一些简化的 R 代码拆分为标记。但是规则真的很简单。我想知道有没有什么工具已经实现了所有的规则,所以我不需要重新发明轮子。

您可以使用

从 R 词法分析器中获取结果
getParseData(parse(text="aggregate(results ~ school, FUN = table, data = df)"))

#    line1 col1 line2 col2 id parent                token terminal      text
# 27     1    1     1   51 27      0                 expr    FALSE          
# 1      1    1     1    9  1      3 SYMBOL_FUNCTION_CALL     TRUE aggregate
# 3      1    1     1    9  3     27                 expr    FALSE          
# 2      1   10     1   10  2     27                  '('     TRUE         (
# 10     1   11     1   26 10     27                 expr    FALSE          
# 4      1   11     1   17  4      6               SYMBOL     TRUE   results
# 6      1   11     1   17  6     10                 expr    FALSE          
# 5      1   19     1   19  5     10                  '~'     TRUE         ~
# 7      1   21     1   26  7      9               SYMBOL     TRUE    school
# 9      1   21     1   26  9     10                 expr    FALSE          
# 8      1   27     1   27  8     27                  ','     TRUE         ,
# 13     1   29     1   31 13     27           SYMBOL_SUB     TRUE       FUN
# 14     1   33     1   33 14     27               EQ_SUB     TRUE         =
# 15     1   35     1   39 15     17               SYMBOL     TRUE     table
# 17     1   35     1   39 17     27                 expr    FALSE          
# 16     1   40     1   40 16     27                  ','     TRUE         ,
# 20     1   42     1   45 20     27           SYMBOL_SUB     TRUE      data
# 21     1   47     1   47 21     27               EQ_SUB     TRUE         =
# 22     1   49     1   50 22     24               SYMBOL     TRUE        df
# 24     1   49     1   50 24     27                 expr    FALSE          
# 23     1   51     1   51 23     27                  ')'     TRUE         )

在内部看来,R 正在使用源代码的 Bison lexer. The grammar it uses is defined in the gram.y 文件。您应该能够从中获得所需的所有信息。最好依靠 built-in 词法分析器,而不是让包尝试 re-implement 构建一个