这是代码:
aggregate(results ~ school, FUN = table, data = df)
上面的代码是用R编写的。R中是否有可用的工具来提取令牌,因此上面的内容变为:
FUNC_NAME(DATA ~ DATA, PARA_FUN = DATA, PARA_DATA = DATA)
我尝试minilexer将一些简化的R代码拆分为令牌。但是规则真的很简单。我想知道是否有工具已经实现了所有规则,所以我不需要重新发明轮子。
答案 0 :(得分:3)
您可以使用
从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。它使用的语法在源代码的gram.y文件中定义。您应该能够从中获得所需的所有信息。最好使用内置的词法分析器,而不是使用一个软件包尝试重新实现内部构建