流量R 是一个复杂的,静态的 数据流分析器 联 合 国 R 编程语言, (中文(简体) ), 可用时间 虚拟系统, (中文(简体) ), 波西特龙, (中文(简体) ), 斯图迪奥, (中文(简体) ), 财务报告和审定财务报表 夹克。 。 。 . 它具有各种各样的特点,例如:
-
📚 依赖性分析
鉴于你的分析项目,流程R提供了大量所谓的 查询 获取更多关于您的代码的信息. 一个重要的问题是 依赖性查询,它显示您需要的图书馆, 它读取的数据文件、它来源的脚本以及它输出的数据. 在此基础上 猜测依赖性版本查询 缩小每个版本的范围 在这些图书馆中,通过将项目申报的限制与实际调用代码的功能结合起来,必须具备这些功能. (单位:千美元) XQ 在浏览器中探索 (中文(简体) ) -
🐞 代码折叠
为常见问题和潜在错误分析您的 R 脚本( 见 维基页面 以获取关于当前支持的接口的更多信息. (单位:千美元) XQ 在浏览器中探索 (中文(简体) )示例: 有流程R 的 Linting 代码
要插入代码,你可以使用 回复 或 视觉工作室代码扩展 (见 vscode-flowr # 283 (英语)) (中文(简体) ).
$ docker run -it --rm eagleoutice/flowr # or npm run flowr flowR repl v2.17.5, R grammar v14 (tree-sitter engine) R> :query @linter "read.csv(\"/root/x.txt\")"产出
Query: linter (19 ms) ╰ File Path Validity (file-path-validity): ╰ certain: ╰ Path `/root/x.txt` at 1.1-23 ╰ Absolute Paths (absolute-file-paths): ╰ certain: ╰ Path `/root/x.txt` at 1.1-23 ╰ +21 rules with no findings (:query to see all) All queries together required ≈19 ms (1ms accuracy, total 19 ms)电筒会分析代码 并返回任何发现的问题. 格式更为优美,此返回 :
[ { "type": "linter" } ](可缩短为:
@linter当使用 REPL 命令时:query) (中文(简体) ).成果(预测和总结):
查询 : 线性 (22分钟)
现 数 文件路径有效性 (档案-病理):
确定为:
路径/root/x.txt第1.1至23号
现 数 绝对路径 (绝对-文件-路径):
确定为:
路径/root/x.txt第1.1至23号
现 数 +21 规则,没有定论(:query * 见所有规则)
所有查询加在一起需要22毫秒(1毫秒精确度,共计23毫秒)作为 Json 显示详细结果
分析(包括解析和正常化以及查询)是在生成环境中进行的.
JSON包含有关节点的ID(参见: 接口 维基页面.
{"linter":{"results":{"deprecated-functions":{"results":[],".meta":{"builtin":0,"sigdb":0}},"file-path-validity":{"results":[{"involvedId":3,"loc":[1,1,1,23],"filePath":"/root/x.txt","certainty":"certain"}],".meta":{"totalReads":1,"totalUnknown":0,"totalWritesBeforeAlways":0,"totalValid":0}},"seeded-randomness":{"results":[],".meta":{"consumerCalls":0,"callsWithFunctionProducers":0,"callsWithAssignmentProducers":0,"callsWithNonConstantProducers":0,"callsWithOtherBranchProducers":0}},"absolute-file-paths":{"results":[{"certainty":"certain","filePath":"/root/x.txt","loc":[1,1,1,23]}],".meta":{"totalConsidered":1,"totalUnknown":0}},"unused-definitions":{"results":[],".meta":{"totalConsidered":0}},"network-functions":{"results":[],".meta":{"totalCalls":0,"totalFunctionDefinitions":0}},"dataframe-access-validation":{"results":[],".meta":{"numOperations":0,"numAccesses":0,"totalAccessed":0}},"dead-code":{"results":[],".meta":{}},"useless-loop":{"results":[],".meta":{"numOfUselessLoops":0}},"problematic-inputs":{"results":[],".meta":{}},"stop-call":{"results":[],".meta":{"consideredNodes":0}},"roxygen-arguments":{"results":[],".meta":{}},"no-leaked-credentials":{"results":[],".meta":{"totalChecked":1}},"undefined-symbol":{"results":[],".meta":{"totalFunctionCalls":1,"totalVariableUses":0,"suppressed":{"installed":0,"loadedPackage":0,"enclosingScope":0,"nonStandardEval":0,"subscript":0,"unresolvedLibrary":0,"declaredGlobal":0}}},"unused-import":{"results":[],".meta":{"totalConsidered":0,"totalUnresolved":0,"totalMultiPackage":0,"totalUnused":0}},"unclosed-connection":{"results":[],".meta":{"totalOpened":0,"totalClosed":0}},"overwritten-file":{"results":[],".meta":{"totalFiles":0}},"unescaped-arguments":{"results":[],".meta":{"totalCriticalArguments":0,"totalEscapedArguments":0}},"namespace-access":{"results":[],".meta":{"unresolved":0}},"secret-exfiltration":{"results":[],".meta":{"secretSinkCalls":0}},"process-state-in-session":{"results":[],".meta":{"sessionFunctions":0}},"call-contracts":{"results":[],".meta":{"checkedCalls":0}},"interactive-functions":{"results":[],".meta":{"totalCalls":0,"totalFunctionDefinitions":0}}},".meta":{}},".meta":{}} -
🍕 程序切换
鉴于一个点 像一个情节的可视化, 流量R 将程序缩小为仅相关部分 用于计算利息点. (单位:千美元) XQ 在浏览器中探索 (中文(简体) )示例:用流线切换
最简单的取回切片的方法是用流管 视觉工作室代码扩展。 。 。 . 不过,你可以使用 回复 还有. 如果您想要在另一个上下文中重新使用现有分析的特定部分, 或者您想要理解的话, 这可以帮助您 密码里发生的事.
为此,让我们看看位于 测试/测试文件/实例R数字 :
sum <- 0 product <- 1 w <- 7 N <- 10 for (i in 1:(N-1)) { sum <- sum + i + w product <- product * i } cat("Sum:", sum, "\n") cat("Product:", product, "\n")让我们假设我们只对
sum以第11行印制. 要获得此切片, 您可以使用以下命令 :$ docker run -it --rm eagleoutice/flowr # or npm run flowr flowR repl v2.17.5, R grammar v14 (tree-sitter engine) R> :query @static-slice (11@sum) file://test/testfiles/example.R产出
sum <- 0 w <- 7 N <- 10 for(i in 1:(N-1)) sum <- sum + i + w sum All queries together required ≈19 ms (1ms accuracy, total 20 ms) -
🚀 快速书法、数据和控制流程图
在刚刚 103.7分/秒 (截至2026年11月8日), (中文(简体) ), 流量R 可以分析平均真实世界R脚本的数据与控制流量. 见 基准 欲了解更多信息, 并咨询 维基页面 详细情况 数据流图 以及 调用图表。 。 。 . (单位:千美元) XQ 在浏览器中探索 (中文(简体) )示例:生成带有流程R的数据流图
您可以使用 回复。 。 。 . 诸如
:dataflow*允许您查看 数据流图 用于给定的 R 脚本.举一例曰:
sum <- 0 product <- 1 w <- 7 N <- 10 for (i in 1:(N-1)) { sum <- sum + i + w product <- product * i } cat("Sum:", sum, "\n") cat("Product:", product, "\n")为了得到 数据流图 对于此脚本,您可以使用以下命令:
$ docker run -it --rm eagleoutice/flowr # or npm run flowr flowR repl v2.17.5, R grammar v14 (tree-sitter engine) R> :dataflow* test/testfiles/example.R产出
'test/testfiles/example.R' looks like a path, analyzing file://test/testfiles/example.R (repl.autoUseFileProtocol is set). https://mermaid.live/view#base64:eyJjb2RlIjoiZmxvd2NoYXJ0IFREXG4gICAgMXt7XCJgKiM5MTtSTnVtYmVyIzkzOyogKiowKipcbiAgICAgICoxLjgqICgqKmlkOiAxKiopYFwifX1cbiAgICAwW1wiYCojOTE7UlN5bWJvbCM5MzsqICoqc3VtKipcbiAgICAgICoxLjEtMyogKCoqaWQ6IDAqKiwgdjogMSlgXCJdXG4gICAgMltbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM2MDsjNDU7KipcbiAgICAgICoxLjEtOCogKCoqaWQ6IDIqKilcbiAgICBhcmc6ICgwLCAxKWBcIl1dXG4gICAgYnVpbHQtaW46XzYwXy1bXCJgQnVpbHQtSW46XG4jNjA7IzQ1O2BcIl1cbiAgICBzdHlsZSBidWlsdC1pbjpfNjBfLSBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDR7e1wiYCojOTE7Uk51bWJlciM5MzsqICoqMSoqXG4gICAgICAqMi4xMiogKCoqaWQ6IDQqKilgXCJ9fVxuICAgIDNbXCJgKiM5MTtSU3ltYm9sIzkzOyogKipwcm9kdWN0KipcbiAgICAgICoyLjEtNyogKCoqaWQ6IDMqKiwgdjogNClgXCJdXG4gICAgNVtbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM2MDsjNDU7KipcbiAgICAgICoyLjEtMTIqICgqKmlkOiA1KiopXG4gICAgYXJnOiAoMywgNClgXCJdXVxuICAgIDd7e1wiYCojOTE7Uk51bWJlciM5MzsqICoqNyoqXG4gICAgICAqMy42KiAoKippZDogNyoqKWBcIn19XG4gICAgNltcImAqIzkxO1JTeW1ib2wjOTM7KiAqKncqKlxuICAgICAgKjMuMSogKCoqaWQ6IDYqKiwgdjogNylgXCJdXG4gICAgOFtbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM2MDsjNDU7KipcbiAgICAgICozLjEtNiogKCoqaWQ6IDgqKilcbiAgICBhcmc6ICg2LCA3KWBcIl1dXG4gICAgMTB7e1wiYCojOTE7Uk51bWJlciM5MzsqICoqMTAqKlxuICAgICAgKjQuNi03KiAoKippZDogMTAqKilgXCJ9fVxuICAgIDlbXCJgKiM5MTtSU3ltYm9sIzkzOyogKipOKipcbiAgICAgICo0LjEqICgqKmlkOiA5KiosIHY6IDEwKWBcIl1cbiAgICAxMVtbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM2MDsjNDU7KipcbiAgICAgICo0LjEtNyogKCoqaWQ6IDExKiopXG4gICAgYXJnOiAoOSwgMTApYFwiXV1cbiAgICAxMltcImAqIzkxO1JTeW1ib2wjOTM7KiAqKmkqKlxuICAgICAgKjYuNiogKCoqaWQ6IDEyKiosIHY6IDIwKWBcIl1cbiAgICAxM3t7XCJgKiM5MTtSTnVtYmVyIzkzOyogKioxKipcbiAgICAgICo2LjExKiAoKippZDogMTMqKilgXCJ9fVxuICAgIDE2KFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKk4qKlxuICAgICAgKjYuMTQqICgqKmlkOiAxNioqKWBcIl0pXG4gICAgMTd7e1wiYCojOTE7Uk51bWJlciM5MzsqICoqMSoqXG4gICAgICAqNi4xNiogKCoqaWQ6IDE3KiopYFwifX1cbiAgICAxOFtbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM0NTsqKlxuICAgICAgKjYuMTQtMTYqICgqKmlkOiAxOCoqKVxuICAgIGFyZzogKDE2LCAxNylgXCJdXVxuICAgIGJ1aWx0LWluOi1bXCJgQnVpbHQtSW46XG4jNDU7YFwiXVxuICAgIHN0eWxlIGJ1aWx0LWluOi0gc3Ryb2tlOmdyYXksZmlsbDpncmF5LHN0cm9rZS13aWR0aDoycHgsb3BhY2l0eTouODtcbiAgICAxOVtbXCJgKiM5MTtSRXhwcmVzc2lvbkxpc3QjOTM7KiBiYXNlIzU4OyM1ODsqKigqKlxuICAgICAgKjYuMTMqICgqKmlkOiAxOSoqKVxuICAgIGFyZzogKDE4KWBcIl1dXG4gICAgYnVpbHQtaW46XzQwX1tcImBCdWlsdC1JbjpcbihgXCJdXG4gICAgc3R5bGUgYnVpbHQtaW46XzQwXyBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDIwW1tcImAqIzkxO1JCaW5hcnlPcCM5MzsqIGJhc2UjNTg7IzU4OyoqIzU4OyoqXG4gICAgICAqNi4xMS0xNyogKCoqaWQ6IDIwKiopXG4gICAgYXJnOiAoMTMsIDE5KWBcIl1dXG4gICAgYnVpbHQtaW46OltcImBCdWlsdC1JbjpcbiM1ODtgXCJdXG4gICAgc3R5bGUgYnVpbHQtaW46OiBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDI0KFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKnN1bSoqXG4gICAgICAqNy4xMC0xMiogKCoqaWQ6IDI0KiosIDM2KylgXCJdKVxuICAgIDI1KFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKmkqKlxuICAgICAgKjcuMTYqICgqKmlkOiAyNSoqLCAzNispYFwiXSlcbiAgICAyNltbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM0MzsqKlxuICAgICAgKjcuMTAtMTYqICgqKmlkOiAyNioqLCAzNispXG4gICAgYXJnOiAoMjQsIDI1KWBcIl1dXG4gICAgYnVpbHQtaW46XzQzX1tcImBCdWlsdC1JbjpcbiM0MztgXCJdXG4gICAgc3R5bGUgYnVpbHQtaW46XzQzXyBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDI3KFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKncqKlxuICAgICAgKjcuMjAqICgqKmlkOiAyNyoqLCAzNispYFwiXSlcbiAgICAyOFtbXCJgKiM5MTtSQmluYXJ5T3AjOTM7KiBiYXNlIzU4OyM1ODsqKiM0MzsqKlxuICAgICAgKjcuMTAtMjAqICgqKmlkOiAyOCoqLCAzNispXG4gICAgYXJnOiAoMjYsIDI3KWBcIl1dXG4gICAgMjNbXCJgKiM5MTtSU3ltYm9sIzkzOyogKipzdW0qKlxuICAgICAgKjcuMy01KiAoKippZDogMjMqKiwgMzYrLCB2OiAyOClgXCJdXG4gICAgMjlbW1wiYCojOTE7UkJpbmFyeU9wIzkzOyogYmFzZSM1ODsjNTg7KiojNjA7IzQ1OyoqXG4gICAgICAqNy4zLTIwKiAoKippZDogMjkqKiwgMzYrKVxuICAgIGFyZzogKDIzLCAyOClgXCJdXVxuICAgIDMxKFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKnByb2R1Y3QqKlxuICAgICAgKjguMTQtMjAqICgqKmlkOiAzMSoqLCAzNispYFwiXSlcbiAgICAzMihbXCJgKiM5MTtSU3ltYm9sIzkzOyogKippKipcbiAgICAgICo4LjI0KiAoKippZDogMzIqKiwgMzYrKWBcIl0pXG4gICAgMzNbW1wiYCojOTE7UkJpbmFyeU9wIzkzOyogYmFzZSM1ODsjNTg7KiojNDI7KipcbiAgICAgICo4LjE0LTI0KiAoKippZDogMzMqKiwgMzYrKVxuICAgIGFyZzogKDMxLCAzMilgXCJdXVxuICAgIGJ1aWx0LWluOl80Ml9bXCJgQnVpbHQtSW46XG4jNDI7YFwiXVxuICAgIHN0eWxlIGJ1aWx0LWluOl80Ml8gc3Ryb2tlOmdyYXksZmlsbDpncmF5LHN0cm9rZS13aWR0aDoycHgsb3BhY2l0eTouODtcbiAgICAzMFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKnByb2R1Y3QqKlxuICAgICAgKjguMy05KiAoKippZDogMzAqKiwgMzYrLCB2OiAzMylgXCJdXG4gICAgMzRbW1wiYCojOTE7UkJpbmFyeU9wIzkzOyogYmFzZSM1ODsjNTg7KiojNjA7IzQ1OyoqXG4gICAgICAqOC4zLTI0KiAoKippZDogMzQqKiwgMzYrKVxuICAgIGFyZzogKDMwLCAzMylgXCJdXVxuICAgIDM1W1tcImAqIzkxO1JFeHByZXNzaW9uTGlzdCM5MzsqIGJhc2UjNTg7IzU4OyoqIzEyMzsqKlxuICAgICAgKjYuMjAqICgqKmlkOiAzNSoqLCAzNispXG4gICAgYXJnOiAoMjksIDM0KWBcIl1dXG4gICAgYnVpbHQtaW46XzEyM19bXCJgQnVpbHQtSW46XG4jMTIzO2BcIl1cbiAgICBzdHlsZSBidWlsdC1pbjpfMTIzXyBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDM2W1tcImAqIzkxO1JGb3JMb29wIzkzOyogYmFzZSM1ODsjNTg7Kipmb3IqKlxuICAgICAgKjYuMS05LjEqICgqKmlkOiAzNioqKVxuICAgIGFyZzogKDEyLCAyMCwgMzUpYFwiXV1cbiAgICBidWlsdC1pbjpmb3JbXCJgQnVpbHQtSW46XG5mb3JgXCJdXG4gICAgc3R5bGUgYnVpbHQtaW46Zm9yIHN0cm9rZTpncmF5LGZpbGw6Z3JheSxzdHJva2Utd2lkdGg6MnB4LG9wYWNpdHk6Ljg7XG4gICAgMzh7e1wiYCojOTE7UlN0cmluZyM5MzsqICoqIzM0O1N1bSM1ODsjMzQ7KipcbiAgICAgICoxMS41LTEwKiAoKippZDogMzgqKilgXCJ9fVxuICAgIDQwKFtcImAqIzkxO1JTeW1ib2wjOTM7KiAqKnN1bSoqXG4gICAgICAqMTEuMTMtMTUqICgqKmlkOiA0MCoqKWBcIl0pXG4gICAgNDJ7e1wiYCojOTE7UlN0cmluZyM5MzsqICoqIzM0O1xuIzM0OyoqXG4gICAgICAqMTEuMTgtMjEqICgqKmlkOiA0MioqKWBcIn19XG4gICAgNDRbW1wiYCojOTE7UkZ1bmN0aW9uQ2FsbCM5MzsqIGJhc2UjNTg7IzU4OyoqY2F0KipcbiAgICAgICoxMS4xLTIyKiAoKippZDogNDQqKilcbiAgICBhcmc6ICgzOCwgNDAsIDQyKWBcIl1dXG4gICAgYnVpbHQtaW46Y2F0W1wiYEJ1aWx0LUluOlxuY2F0YFwiXVxuICAgIHN0eWxlIGJ1aWx0LWluOmNhdCBzdHJva2U6Z3JheSxmaWxsOmdyYXksc3Ryb2tlLXdpZHRoOjJweCxvcGFjaXR5Oi44O1xuICAgIDQ2e3tcImAqIzkxO1JTdHJpbmcjOTM7KiAqKiMzNDtQcm9kdWN0IzU4OyMzNDsqKlxuICAgICAgKjEyLjUtMTQqICgqKmlkOiA0NioqKWBcIn19XG4gICAgNDgoW1wiYCojOTE7UlN5bWJvbCM5MzsqICoqcHJvZHVjdCoqXG4gICAgICAqMTIuMTctMjMqICgqKmlkOiA0OCoqKWBcIl0pXG4gICAgNTB7e1wiYCojOTE7UlN0cmluZyM5MzsqICoqIzM0O1xuIzM0OyoqXG4gICAgICAqMTIuMjYtMjkqICgqKmlkOiA1MCoqKWBcIn19XG4gICAgNTJbW1wiYCojOTE7UkZ1bmN0aW9uQ2FsbCM5MzsqIGJhc2UjNTg7IzU4OyoqY2F0KipcbiAgICAgICoxMi4xLTMwKiAoKippZDogNTIqKilcbiAgICBhcmc6ICg0NiwgNDgsIDUwKWBcIl1dXG4gICAgMSAtLi0+fFwiZmxvd1wifCAwXG4gICAgbGlua1N0eWxlIDAgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAwIC0tPnxcImRlZmluZWQtYnksIGZsb3dcInwgMlxuICAgIDAgLS0+fFwiZGVmaW5lZC1ieVwifCAxXG4gICAgMiAtLT58XCJyZWFkcywgYXJnXCJ8IDFcbiAgICAyIC0tPnxcInJldHVybnMsIGFyZ1wifCAwXG4gICAgMiAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOl82MF8tXG4gICAgbGlua1N0eWxlIDUgc3Ryb2tlOmdyYXk7XG4gICAgMiAtLi0+fFwiZmxvd1wifCA0XG4gICAgbGlua1N0eWxlIDYgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICA0IC0uLT58XCJmbG93XCJ8IDNcbiAgICBsaW5rU3R5bGUgNyBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDMgLS0+fFwiZGVmaW5lZC1ieSwgZmxvd1wifCA1XG4gICAgMyAtLT58XCJkZWZpbmVkLWJ5XCJ8IDRcbiAgICA1IC0tPnxcInJlYWRzLCBhcmdcInwgNFxuICAgIDUgLS0+fFwicmV0dXJucywgYXJnXCJ8IDNcbiAgICA1IC0uLT58XCJyZWFkcywgY2FsbHNcInwgYnVpbHQtaW46XzYwXy1cbiAgICBsaW5rU3R5bGUgMTIgc3Ryb2tlOmdyYXk7XG4gICAgNSAtLi0+fFwiZmxvd1wifCA3XG4gICAgbGlua1N0eWxlIDEzIHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgNyAtLi0+fFwiZmxvd1wifCA2XG4gICAgbGlua1N0eWxlIDE0IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgNiAtLT58XCJkZWZpbmVkLWJ5LCBmbG93XCJ8IDhcbiAgICA2IC0tPnxcImRlZmluZWQtYnlcInwgN1xuICAgIDggLS0+fFwicmVhZHMsIGFyZ1wifCA3XG4gICAgOCAtLT58XCJyZXR1cm5zLCBhcmdcInwgNlxuICAgIDggLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjpfNjBfLVxuICAgIGxpbmtTdHlsZSAxOSBzdHJva2U6Z3JheTtcbiAgICA4IC0uLT58XCJmbG93XCJ8IDEwXG4gICAgbGlua1N0eWxlIDIwIHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMTAgLS4tPnxcImZsb3dcInwgOVxuICAgIGxpbmtTdHlsZSAyMSBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDkgLS0+fFwiZGVmaW5lZC1ieSwgZmxvd1wifCAxMVxuICAgIDkgLS0+fFwiZGVmaW5lZC1ieVwifCAxMFxuICAgIDExIC0tPnxcInJlYWRzLCBhcmdcInwgMTBcbiAgICAxMSAtLT58XCJyZXR1cm5zLCBhcmdcInwgOVxuICAgIDExIC0uLT58XCJyZWFkcywgY2FsbHNcInwgYnVpbHQtaW46XzYwXy1cbiAgICBsaW5rU3R5bGUgMjYgc3Ryb2tlOmdyYXk7XG4gICAgMTEgLS4tPnxcImZsb3dcInwgMTNcbiAgICBsaW5rU3R5bGUgMjcgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAxMiAtLT58XCJkZWZpbmVkLWJ5XCJ8IDIwXG4gICAgMTIgLS4tPnxcImJyYW5jaCAod2hlbjogdHJ1ZSlcInwgMjRcbiAgICBsaW5rU3R5bGUgMjkgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAxMiAtLi0+fFwiYnJhbmNoICh3aGVuOiBmYWxzZSlcInwgMzZcbiAgICBsaW5rU3R5bGUgMzAgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAxMyAtLi0+fFwiZmxvd1wifCAxNlxuICAgIGxpbmtTdHlsZSAzMSBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDE2IC0tPnxcInJlYWRzXCJ8IDlcbiAgICAxNiAtLi0+fFwiZmxvd1wifCAxN1xuICAgIGxpbmtTdHlsZSAzMyBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDE3IC0uLT58XCJmbG93XCJ8IDE4XG4gICAgbGlua1N0eWxlIDM0IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMTggLS0+fFwicmVhZHMsIGFyZ1wifCAxNlxuICAgIDE4IC0tPnxcInJlYWRzLCBhcmdcInwgMTdcbiAgICAxOCAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOi1cbiAgICBsaW5rU3R5bGUgMzcgc3Ryb2tlOmdyYXk7XG4gICAgMTggLS4tPnxcImZsb3dcInwgMTlcbiAgICBsaW5rU3R5bGUgMzggc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAxOSAtLT58XCJyZWFkcywgcmV0dXJucywgYXJnXCJ8IDE4XG4gICAgMTkgLS4tPnxcInJlYWRzXCJ8IGJ1aWx0LWluOl80MF9cbiAgICBsaW5rU3R5bGUgNDAgc3Ryb2tlOmdyYXk7XG4gICAgMTkgLS4tPnxcImZsb3dcInwgMjBcbiAgICBsaW5rU3R5bGUgNDEgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAyMCAtLT58XCJyZWFkcywgYXJnXCJ8IDEzXG4gICAgMjAgLS0+fFwicmVhZHMsIGFyZ1wifCAxOVxuICAgIDIwIC0uLT58XCJmbG93XCJ8IDEyXG4gICAgbGlua1N0eWxlIDQ0IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMjAgLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjo6XG4gICAgbGlua1N0eWxlIDQ1IHN0cm9rZTpncmF5O1xuICAgIDI0IC0tPnxcInJlYWRzXCJ8IDBcbiAgICAyNCAtLi0+fFwiZmxvd1wifCAyNVxuICAgIGxpbmtTdHlsZSA0NyBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDI0IC0tPnxcInJlYWRzXCJ8IDIzXG4gICAgMjUgLS0+fFwicmVhZHNcInwgMTJcbiAgICAyNSAtLi0+fFwiZmxvd1wifCAyNlxuICAgIGxpbmtTdHlsZSA1MCBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDI2IC0tPnxcInJlYWRzLCBhcmdcInwgMjRcbiAgICAyNiAtLT58XCJyZWFkcywgYXJnXCJ8IDI1XG4gICAgMjYgLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjpfNDNfXG4gICAgbGlua1N0eWxlIDUzIHN0cm9rZTpncmF5O1xuICAgIDI2IC0uLT58XCJmbG93XCJ8IDI3XG4gICAgbGlua1N0eWxlIDU0IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMjcgLS0+fFwicmVhZHNcInwgNlxuICAgIDI3IC0uLT58XCJmbG93XCJ8IDI4XG4gICAgbGlua1N0eWxlIDU2IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMjggLS0+fFwicmVhZHMsIGFyZ1wifCAyNlxuICAgIDI4IC0tPnxcInJlYWRzLCBhcmdcInwgMjdcbiAgICAyOCAtLi0+fFwiZmxvd1wifCAyM1xuICAgIGxpbmtTdHlsZSA1OSBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDI4IC0uLT58XCJyZWFkcywgY2FsbHNcInwgYnVpbHQtaW46XzQzX1xuICAgIGxpbmtTdHlsZSA2MCBzdHJva2U6Z3JheTtcbiAgICAyMyAtLT58XCJkZWZpbmVkLWJ5LCBmbG93XCJ8IDI5XG4gICAgMjMgLS0+fFwiZGVmaW5lZC1ieVwifCAyOFxuICAgIDI5IC0tPnxcInJlYWRzLCBhcmdcInwgMjhcbiAgICAyOSAtLT58XCJyZXR1cm5zLCBhcmdcInwgMjNcbiAgICAyOSAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOl82MF8tXG4gICAgbGlua1N0eWxlIDY1IHN0cm9rZTpncmF5O1xuICAgIDI5IC0uLT58XCJmbG93XCJ8IDMxXG4gICAgbGlua1N0eWxlIDY2IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMzEgLS0+fFwicmVhZHNcInwgM1xuICAgIDMxIC0uLT58XCJmbG93XCJ8IDMyXG4gICAgbGlua1N0eWxlIDY4IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMzEgLS0+fFwicmVhZHNcInwgMzBcbiAgICAzMiAtLT58XCJyZWFkc1wifCAxMlxuICAgIDMyIC0uLT58XCJmbG93XCJ8IDMzXG4gICAgbGlua1N0eWxlIDcxIHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMzMgLS0+fFwicmVhZHMsIGFyZ1wifCAzMVxuICAgIDMzIC0tPnxcInJlYWRzLCBhcmdcInwgMzJcbiAgICAzMyAtLi0+fFwiZmxvd1wifCAzMFxuICAgIGxpbmtTdHlsZSA3NCBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDMzIC0uLT58XCJyZWFkcywgY2FsbHNcInwgYnVpbHQtaW46XzQyX1xuICAgIGxpbmtTdHlsZSA3NSBzdHJva2U6Z3JheTtcbiAgICAzMCAtLT58XCJkZWZpbmVkLWJ5LCBmbG93XCJ8IDM0XG4gICAgMzAgLS0+fFwiZGVmaW5lZC1ieVwifCAzM1xuICAgIDM0IC0tPnxcInJlYWRzLCBhcmdcInwgMzNcbiAgICAzNCAtLT58XCJyZXR1cm5zLCBhcmdcInwgMzBcbiAgICAzNCAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOl82MF8tXG4gICAgbGlua1N0eWxlIDgwIHN0cm9rZTpncmF5O1xuICAgIDM0IC0uLT58XCJmbG93XCJ8IDM1XG4gICAgbGlua1N0eWxlIDgxIHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgMzUgLS0+fFwiYXJnXCJ8IDI5XG4gICAgMzUgLS0+fFwicmV0dXJucywgYXJnXCJ8IDM0XG4gICAgMzUgLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjpfMTIzX1xuICAgIGxpbmtTdHlsZSA4NCBzdHJva2U6Z3JheTtcbiAgICAzNSAtLi0+fFwiZmxvd1wifCAxMlxuICAgIGxpbmtTdHlsZSA4NSBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDM2IC0tPnxcImFyZ1wifCAxMlxuICAgIDM2IC0tPnxcInJlYWRzLCBhcmdcInwgMjBcbiAgICAzNiAtLT58XCJhcmcsIG5vbi1zdGFuZGFyZC1ldmFsdWF0aW9uXCJ8IDM1XG4gICAgMzYgLS4tPnxcInJlYWRzLCBjYWxsc1wifCBidWlsdC1pbjpmb3JcbiAgICBsaW5rU3R5bGUgODkgc3Ryb2tlOmdyYXk7XG4gICAgMzYgLS4tPnxcImZsb3dcInwgMzhcbiAgICBsaW5rU3R5bGUgOTAgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICAzOCAtLi0+fFwiZmxvd1wifCA0MFxuICAgIGxpbmtTdHlsZSA5MSBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDQwIC0tPnxcInJlYWRzXCJ8IDIzXG4gICAgNDAgLS4tPnxcImZsb3dcInwgNDJcbiAgICBsaW5rU3R5bGUgOTMgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICA0MiAtLi0+fFwiZmxvd1wifCA0NFxuICAgIGxpbmtTdHlsZSA5NCBzdHJva2U6Z3JheSxjb2xvcjpncmF5O1xuICAgIDQ0IC0tPnxcInJlYWRzLCBhcmdcInwgMzhcbiAgICA0NCAtLT58XCJyZWFkcywgYXJnXCJ8IDQwXG4gICAgNDQgLS0+fFwicmVhZHMsIGFyZ1wifCA0MlxuICAgIDQ0IC0uLT58XCJyZWFkcywgY2FsbHNcInwgYnVpbHQtaW46Y2F0XG4gICAgbGlua1N0eWxlIDk4IHN0cm9rZTpncmF5O1xuICAgIDQ0IC0uLT58XCJmbG93XCJ8IDQ2XG4gICAgbGlua1N0eWxlIDk5IHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgNDYgLS4tPnxcImZsb3dcInwgNDhcbiAgICBsaW5rU3R5bGUgMTAwIHN0cm9rZTpncmF5LGNvbG9yOmdyYXk7XG4gICAgNDggLS0+fFwicmVhZHNcInwgMzBcbiAgICA0OCAtLi0+fFwiZmxvd1wifCA1MFxuICAgIGxpbmtTdHlsZSAxMDIgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICA1MCAtLi0+fFwiZmxvd1wifCA1MlxuICAgIGxpbmtTdHlsZSAxMDMgc3Ryb2tlOmdyYXksY29sb3I6Z3JheTtcbiAgICA1MiAtLT58XCJyZWFkcywgYXJnXCJ8IDQ2XG4gICAgNTIgLS0+fFwicmVhZHMsIGFyZ1wifCA0OFxuICAgIDUyIC0tPnxcInJlYWRzLCBhcmdcInwgNTBcbiAgICA1MiAtLi0+fFwicmVhZHMsIGNhbGxzXCJ8IGJ1aWx0LWluOmNhdFxuICAgIGxpbmtTdHlsZSAxMDcgc3Ryb2tlOmdyYXk7IiwibWVybWFpZCI6eyJhdXRvU3luYyI6dHJ1ZX19链接输出后应显示以下内容:
flowchart LR 1{{"`*#91;RNumber#93;* **0** *1.8* (**id: 1**)`"}} 0["`*#91;RSymbol#93;* **sum** *1.1-3* (**id: 0**, v: 1)`"] 2[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *1.1-8* (**id: 2**) arg: (0, 1)`"]] built-in:_60_-["`Built-In: #60;#45;`"] style built-in:_60_- stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 4{{"`*#91;RNumber#93;* **1** *2.12* (**id: 4**)`"}} 3["`*#91;RSymbol#93;* **product** *2.1-7* (**id: 3**, v: 4)`"] 5[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *2.1-12* (**id: 5**) arg: (3, 4)`"]] 7{{"`*#91;RNumber#93;* **7** *3.6* (**id: 7**)`"}} 6["`*#91;RSymbol#93;* **w** *3.1* (**id: 6**, v: 7)`"] 8[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *3.1-6* (**id: 8**) arg: (6, 7)`"]] 10{{"`*#91;RNumber#93;* **10** *4.6-7* (**id: 10**)`"}} 9["`*#91;RSymbol#93;* **N** *4.1* (**id: 9**, v: 10)`"] 11[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *4.1-7* (**id: 11**) arg: (9, 10)`"]] 12["`*#91;RSymbol#93;* **i** *6.6* (**id: 12**, v: 20)`"] 13{{"`*#91;RNumber#93;* **1** *6.11* (**id: 13**)`"}} 16(["`*#91;RSymbol#93;* **N** *6.14* (**id: 16**)`"]) 17{{"`*#91;RNumber#93;* **1** *6.16* (**id: 17**)`"}} 18[["`*#91;RBinaryOp#93;* base#58;#58;**#45;** *6.14-16* (**id: 18**) arg: (16, 17)`"]] built-in:-["`Built-In: #45;`"] style built-in:- stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 19[["`*#91;RExpressionList#93;* base#58;#58;**(** *6.13* (**id: 19**) arg: (18)`"]] built-in:_40_["`Built-In: (`"] style built-in:_40_ stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 20[["`*#91;RBinaryOp#93;* base#58;#58;**#58;** *6.11-17* (**id: 20**) arg: (13, 19)`"]] built-in::["`Built-In: #58;`"] style built-in:: stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 24(["`*#91;RSymbol#93;* **sum** *7.10-12* (**id: 24**, 36+)`"]) 25(["`*#91;RSymbol#93;* **i** *7.16* (**id: 25**, 36+)`"]) 26[["`*#91;RBinaryOp#93;* base#58;#58;**#43;** *7.10-16* (**id: 26**, 36+) arg: (24, 25)`"]] built-in:_43_["`Built-In: #43;`"] style built-in:_43_ stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 27(["`*#91;RSymbol#93;* **w** *7.20* (**id: 27**, 36+)`"]) 28[["`*#91;RBinaryOp#93;* base#58;#58;**#43;** *7.10-20* (**id: 28**, 36+) arg: (26, 27)`"]] 23["`*#91;RSymbol#93;* **sum** *7.3-5* (**id: 23**, 36+, v: 28)`"] 29[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *7.3-20* (**id: 29**, 36+) arg: (23, 28)`"]] 31(["`*#91;RSymbol#93;* **product** *8.14-20* (**id: 31**, 36+)`"]) 32(["`*#91;RSymbol#93;* **i** *8.24* (**id: 32**, 36+)`"]) 33[["`*#91;RBinaryOp#93;* base#58;#58;**#42;** *8.14-24* (**id: 33**, 36+) arg: (31, 32)`"]] built-in:_42_["`Built-In: #42;`"] style built-in:_42_ stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 30["`*#91;RSymbol#93;* **product** *8.3-9* (**id: 30**, 36+, v: 33)`"] 34[["`*#91;RBinaryOp#93;* base#58;#58;**#60;#45;** *8.3-24* (**id: 34**, 36+) arg: (30, 33)`"]] 35[["`*#91;RExpressionList#93;* base#58;#58;**#123;** *6.20* (**id: 35**, 36+) arg: (29, 34)`"]] built-in:_123_["`Built-In: #123;`"] style built-in:_123_ stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 36[["`*#91;RForLoop#93;* base#58;#58;**for** *6.1-9.1* (**id: 36**) arg: (12, 20, 35)`"]] built-in:for["`Built-In: for`"] style built-in:for stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 38{{"`*#91;RString#93;* **#34;Sum#58;#34;** *11.5-10* (**id: 38**)`"}} 40(["`*#91;RSymbol#93;* **sum** *11.13-15* (**id: 40**)`"]) 42{{"`*#91;RString#93;* **#34; #34;** *11.18-21* (**id: 42**)`"}} 44[["`*#91;RFunctionCall#93;* base#58;#58;**cat** *11.1-22* (**id: 44**) arg: (38, 40, 42)`"]] built-in:cat["`Built-In: cat`"] style built-in:cat stroke:gray,fill:gray,stroke-width:2px,opacity:.8; 46{{"`*#91;RString#93;* **#34;Product#58;#34;** *12.5-14* (**id: 46**)`"}} 48(["`*#91;RSymbol#93;* **product** *12.17-23* (**id: 48**)`"]) 50{{"`*#91;RString#93;* **#34; #34;** *12.26-29* (**id: 50**)`"}} 52[["`*#91;RFunctionCall#93;* base#58;#58;**cat** *12.1-30* (**id: 52**) arg: (46, 48, 50)`"]] 1 -.->|"flow"| 0 linkStyle 0 stroke:gray,color:gray; 0 -->|"defined-by, flow"| 2 0 -->|"defined-by"| 1 2 -->|"reads, arg"| 1 2 -->|"returns, arg"| 0 2 -.->|"reads, calls"| built-in:_60_- linkStyle 5 stroke:gray; 2 -.->|"flow"| 4 linkStyle 6 stroke:gray,color:gray; 4 -.->|"flow"| 3 linkStyle 7 stroke:gray,color:gray; 3 -->|"defined-by, flow"| 5 3 -->|"defined-by"| 4 5 -->|"reads, arg"| 4 5 -->|"returns, arg"| 3 5 -.->|"reads, calls"| built-in:_60_- linkStyle 12 stroke:gray; 5 -.->|"flow"| 7 linkStyle 13 stroke:gray,color:gray; 7 -.->|"flow"| 6 linkStyle 14 stroke:gray,color:gray; 6 -->|"defined-by, flow"| 8 6 -->|"defined-by"| 7 8 -->|"reads, arg"| 7 8 -->|"returns, arg"| 6 8 -.->|"reads, calls"| built-in:_60_- linkStyle 19 stroke:gray; 8 -.->|"flow"| 10 linkStyle 20 stroke:gray,color:gray; 10 -.->|"flow"| 9 linkStyle 21 stroke:gray,color:gray; 9 -->|"defined-by, flow"| 11 9 -->|"defined-by"| 10 11 -->|"reads, arg"| 10 11 -->|"returns, arg"| 9 11 -.->|"reads, calls"| built-in:_60_- linkStyle 26 stroke:gray; 11 -.->|"flow"| 13 linkStyle 27 stroke:gray,color:gray; 12 -->|"defined-by"| 20 12 -.->|"branch (when: true)"| 24 linkStyle 29 stroke:gray,color:gray; 12 -.->|"branch (when: false)"| 36 linkStyle 30 stroke:gray,color:gray; 13 -.->|"flow"| 16 linkStyle 31 stroke:gray,color:gray; 16 -->|"reads"| 9 16 -.->|"flow"| 17 linkStyle 33 stroke:gray,color:gray; 17 -.->|"flow"| 18 linkStyle 34 stroke:gray,color:gray; 18 -->|"reads, arg"| 16 18 -->|"reads, arg"| 17 18 -.->|"reads, calls"| built-in:- linkStyle 37 stroke:gray; 18 -.->|"flow"| 19 linkStyle 38 stroke:gray,color:gray; 19 -->|"reads, returns, arg"| 18 19 -.->|"reads"| built-in:_40_ linkStyle 40 stroke:gray; 19 -.->|"flow"| 20 linkStyle 41 stroke:gray,color:gray; 20 -->|"reads, arg"| 13 20 -->|"reads, arg"| 19 20 -.->|"flow"| 12 linkStyle 44 stroke:gray,color:gray; 20 -.->|"reads, calls"| built-in:: linkStyle 45 stroke:gray; 24 -->|"reads"| 0 24 -.->|"flow"| 25 linkStyle 47 stroke:gray,color:gray; 24 -->|"reads"| 23 25 -->|"reads"| 12 25 -.->|"flow"| 26 linkStyle 50 stroke:gray,color:gray; 26 -->|"reads, arg"| 24 26 -->|"reads, arg"| 25 26 -.->|"reads, calls"| built-in:_43_ linkStyle 53 stroke:gray; 26 -.->|"flow"| 27 linkStyle 54 stroke:gray,color:gray; 27 -->|"reads"| 6 27 -.->|"flow"| 28 linkStyle 56 stroke:gray,color:gray; 28 -->|"reads, arg"| 26 28 -->|"reads, arg"| 27 28 -.->|"flow"| 23 linkStyle 59 stroke:gray,color:gray; 28 -.->|"reads, calls"| built-in:_43_ linkStyle 60 stroke:gray; 23 -->|"defined-by, flow"| 29 23 -->|"defined-by"| 28 29 -->|"reads, arg"| 28 29 -->|"returns, arg"| 23 29 -.->|"reads, calls"| built-in:_60_- linkStyle 65 stroke:gray; 29 -.->|"flow"| 31 linkStyle 66 stroke:gray,color:gray; 31 -->|"reads"| 3 31 -.->|"flow"| 32 linkStyle 68 stroke:gray,color:gray; 31 -->|"reads"| 30 32 -->|"reads"| 12 32 -.->|"flow"| 33 linkStyle 71 stroke:gray,color:gray; 33 -->|"reads, arg"| 31 33 -->|"reads, arg"| 32 33 -.->|"flow"| 30 linkStyle 74 stroke:gray,color:gray; 33 -.->|"reads, calls"| built-in:_42_ linkStyle 75 stroke:gray; 30 -->|"defined-by, flow"| 34 30 -->|"defined-by"| 33 34 -->|"reads, arg"| 33 34 -->|"returns, arg"| 30 34 -.->|"reads, calls"| built-in:_60_- linkStyle 80 stroke:gray; 34 -.->|"flow"| 35 linkStyle 81 stroke:gray,color:gray; 35 -->|"arg"| 29 35 -->|"returns, arg"| 34 35 -.->|"reads, calls"| built-in:_123_ linkStyle 84 stroke:gray; 35 -.->|"flow"| 12 linkStyle 85 stroke:gray,color:gray; 36 -->|"arg"| 12 36 -->|"reads, arg"| 20 36 -->|"arg, non-standard-evaluation"| 35 36 -.->|"reads, calls"| built-in:for linkStyle 89 stroke:gray; 36 -.->|"flow"| 38 linkStyle 90 stroke:gray,color:gray; 38 -.->|"flow"| 40 linkStyle 91 stroke:gray,color:gray; 40 -->|"reads"| 23 40 -.->|"flow"| 42 linkStyle 93 stroke:gray,color:gray; 42 -.->|"flow"| 44 linkStyle 94 stroke:gray,color:gray; 44 -->|"reads, arg"| 38 44 -->|"reads, arg"| 40 44 -->|"reads, arg"| 42 44 -.->|"reads, calls"| built-in:cat linkStyle 98 stroke:gray; 44 -.->|"flow"| 46 linkStyle 99 stroke:gray,color:gray; 46 -.->|"flow"| 48 linkStyle 100 stroke:gray,color:gray; 48 -->|"reads"| 30 48 -.->|"flow"| 50 linkStyle 102 stroke:gray,color:gray; 50 -.->|"flow"| 52 linkStyle 103 stroke:gray,color:gray; 52 -->|"reads, arg"| 46 52 -->|"reads, arg"| 48 52 -->|"reads, arg"| 50 52 -.->|"reads, calls"| built-in:cat linkStyle 107 stroke:gray;
(The analysis ran (parse and normalize with the [tree-sitter](https://github.com/flowr-analysis/flowr/wiki/Engines) engine) in the generation environment. No [signature database](https://github.com/flowr-analysis/flowr/wiki/Signature-Database) is mounted, so `library()` attaches no exports (base-R names are still qualified, e.g., `stats::acf`).)
</details>
</details>
如果你想使用流程R及其提供的特性,请随意检查:
- 视觉工作室代码编号 :波西特龙:在VS代码和Positron(或)中直接提供流量R的访问权限 vscode.dev (英语)(中文(简体) )
- Rstudio 添加语: 将流程R集成到 斯图迪奥
- R 软件包: 在您的 R 脚本中使用流程R
- Docker 图像:在容器中运行流程R,这还包括 flowR 服务器
- 国家防范机制一揽子计划: 在您的 TypeScript 和 JavaScript 工程中包含流程R
如果您已经使用流程R并想要反馈, 请考虑填写我们 反馈表单。 。 。 .
开始
要开始 流量R 及其特征,请检查 概览 维基页面. 这个 设置 维基页面解释如何下载和设置 流量R 在你的系统. 使用 docker QQ,以下一行应该足够(并直接将您放入读取-eval-print回路) :
docker run -it --rm eagleoutice/flowr
您可以进入 :help 获取更多有关其能力的信息.
实例 REPL 会话

如果您想要使用相同的命令 :
- 开始运行
docker run -it --rm eagleoutice/flowr在终端中启动 REPL. - 在REPL中,它运行
:slicer -c '11@prod' demo.R --diff切换示例文件demo.R用于第11行中的打印语句. 请注意:11指第11行号切入!
更多信息
关于如何使用的详细信息 流量R 请参考 维基页面, (中文(简体) ), 以及部署人员 代码文档。 。 。 . 请查看以下出版物。 具体指源代码, 请检查出流R's Zenodo 存档。 。 。 .
* 关于流程R的出版物
如果你对理论背景感兴趣的话 流量R, (中文(简体) ), 请检查date=中的日期值 (帮助) 以下出版物(如果发现这里缺少一纸,请打开) 有新问题:
-
支持数据分析脚本综合(FSE ' 25,工具)
这是指对框架的最新工具演示. 预印时间 arXiv:2604.15963 (中文(简体) )。 。 。 .BibTeX 函数
@article{10.1145/3803437.3806402, author = {Sihler, Florian and Gerstl, Oliver and Pfrenger, Lars and Schubert, Julian and Tichy, Matthias}, title = {Supporting the Comprehension of Data Analysis Scripts}, year = {2026}, doi = {10.1145/3803437.3806402} } -
静态分析 R 程序的数据流(OPSLA ' 25)
如果您在研究中使用了流程R, 请引用本文 .BibTeX 函数
@article{10.1145/3763087, author = {Sihler, Florian and Tichy, Matthias}, title = {Statically Analyzing the Dataflow of R Programs}, year = {2025}, issue_date = {October 2025}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {9}, number = {OOPSLA2}, url = {https://doi.org/10.1145/3763087}, doi = {10.1145/3763087}, abstract = {The R programming language is primarily designed for statistical computing and mostly used by researchers without a background in computer science. R provides a wide range of dynamic features and peculiarities that are difficult to analyze statically like dynamic scoping and lazy evaluation with dynamic side effects. At the same time, the R ecosystem lacks sophisticated analysis tools that support researchers in understanding and improving their code. In this paper, we present a novel static dataflow analysis framework for the R programming language that is capable of handling the dynamic nature of R programs and produces the dataflow graph of given R programs. This graph can be essential in a range of analyses, including program slicing, which we implement as a proof of concept. The core analysis works as a stateful fold over a normalized version of the abstract syntax tree of the R program, which tracks (re-)definitions, values, function calls, side effects, external files, and a dynamic control flow to produce one dataflow graph per program. We evaluate the correctness of our analysis using output equivalence testing on a manually curated dataset of 779 sensible slicing points from executable real-world R scripts. Additionally, we use a set of systematic test cases based on the capabilities of the R language and the implementation of the R interpreter and measure the runtimes well as the memory consumption on a set of 4,230 real-world R scripts and 20,815 packages available on R’s package manager CRAN. Furthermore, we evaluate the recall of our program slicer, its accuracy using shrinking, and its improvement over the state of the art. We correctly analyze almost all programs in our equivalence test suite, preserving the identical output for 99.7\% of the manually curated slicing points. On average, we require 576ms to analyze the dataflow and around 213kB to store the graph of a research script. This shows that our analysis is capable of analyzing real-world sources quickly and correctly. Our slicer achieves an average reduction of 84.8\% of tokens indicating its potential to improve program comprehension.}, journal = {Proc. ACM Program. Lang.}, month = oct, articleno = {309}, numpages = {29}, keywords = {Dataflow Analysis, R Programming Language, Static Analysis} } -
flowR: R 的静态程序扫描器( ASE' 24, 工具)
这指的是工具演示 VS 代码扩展。 。 。 .BibTeX 函数
@inproceedings{DBLP:conf/kbse/SihlerT24, author = {Florian Sihler and Matthias Tichy}, editor = {Vladimir Filkov and Baishakhi Ray and Minghui Zhou}, title = {flowR: {A} Static Program Slicer for {R}}, booktitle = {Proceedings of the 39th {IEEE/ACM} International Conference on Automated Software Engineering, {ASE} 2024, Sacramento, CA, USA, October 27 - November 1, 2024}, pages = {2390--2393}, publisher = {{ACM}}, year = {2024}, url = {https://doi.org/10.1145/3691620.3695359}, doi = {10.1145/3691620.3695359}, timestamp = {Mon, 03 Mar 2025 21:16:51 +0100}, biburl = {https://dblp.org/rec/conf/kbse/SihlerT24.bib}, bibsource = {dblp computer science bibliography, https://dblp.org} } -
关于真实世界静态分析的解剖学(MSR ' 24)
本文通过分析现实世界R码的特性为流程R打下基础.BibTeX 函数
@inproceedings{DBLP:conf/msr/SihlerPSTDD24, author = {Florian Sihler and Lukas Pietzschmann and Raphael Straub and Matthias Tichy and Andor Diera and Abdelhalim Hafedh Dahou}, editor = {Diomidis Spinellis and Alberto Bacchelli and Eleni Constantinou}, title = {On the Anatomy of Real-World {R} Code for Static Analysis}, booktitle = {21st {IEEE/ACM} International Conference on Mining Software Repositories, {MSR} 2024, Lisbon, Portugal, April 15-16, 2024}, pages = {619--630}, publisher = {{ACM}}, year = {2024}, url = {https://doi.org/10.1145/3643991.3644911}, doi = {10.1145/3643991.3644911}, timestamp = {Sun, 19 Jan 2025 13:31:27 +0100}, biburl = {https://dblp.org/rec/conf/msr/SihlerPSTDD24.bib}, bibsource = {dblp computer science bibliography, https://dblp.org} }
使用流程R的工程包括: OSF R 代码补编的计算可复制性 财务报告和审定财务报表 多视图结构图摘要。 。 。 .
捐款
我们欢迎所有的贡献! 这个 正在登入的开发者 页面有你需要开始的一切.
与 区域 财务报告和审定财务报表 节点.js 已安装, npm run setup:dev 检查您的前提条件,安装依赖,并配置 git 钩子.
这个 提供指南 解释我们的承诺公约,
财务报告和审定财务报表 定点测试 显示如何运行测试.
贡献者
流动器 正在积极开发 弗洛里安·西勒 和(自2025年10月1日起) 奥利弗·格斯特尔 下划线
GPLv3 许可证。 。 。 .
它由德国研究基金会(DFG)提供部分资助 504226141 (英语) ("法典通览"
并收到了来自 机会,开源数据科学公司.
生成通知
请注意此文件是使用文件自动生成的 医生读我.ts 作为源.
如果您想做出更改, 请编辑源文件( CI 将照顾其余的) .
实际上,很多文件在 维基百科 生成,所以如果想要更改,请检查源文件.

