如何从 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 构建一个
这是代码:
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 构建一个