代码行分析器是否需要解析树,这是否足够?

2023-12-06

我正在尝试确定为某种语言(例如可用于 Python 和 Matlab 的语言)编写线路分析器所需的条件。

解释“行分析器”的一种天真的方法是假设可以在每一行周围插入时间记录,但行的定义取决于解析器如何处理空格,这只是第一个问题。似乎需要使用解析树并在各个节点周围插入计时。

这个结论正确吗?线路分析器是否需要解析树,这就是所需要的全部(除了时间记录之外)吗?


更新 1:为此提供悬赏,因为问题仍未解决。

更新2:这是一个众所周知的链接Python 线路分析器如果对回答这个问题有帮助。我还无法弄清楚它与解析相关的行为。恐怕 Matlab 分析器的代码无法访问。

另请注意,人们可能会说手动装饰输入代码将消除对解析树的需要,但这不是自动分析器。

更新 3:虽然这个问题与语言无关,但出现这个问题是因为我正在考虑为 R 创建这样一个工具(除非它存在并且我还没有找到它)。

更新 4:关于使用线路分析器与调用堆栈分析器 -这个帖子与使用调用堆栈分析器相关(Rprof()在这种情况下)举例说明了为什么使用调用堆栈而不是通过线路分析器直接分析事物会很痛苦。


我想说,是的,你需要一个解析树(和源代码) - 否则你怎么知道什么构成了“行”和有效的语句?

但实际的简化可能是“语句分析器”而不是“行分析器”。 在 R 中,解析树很容易获得:body(theFunction),因此在每个语句周围插入测量代码应该相当容易。通过更多的工作,您可以将其插入到属于同一行的一组语句周围。

在 R 中,从文件加载的函数体通常也有一个属性srcref列出了每个“行”(实际上是每个语句)的来源:

这是一个示例函数(放入“example.R”中):

f <- function(x, y=3)
{
    a <- 0; a <- 1  # Two statements on one line
    a <- (x + 1) *  # One statement on two lines
        (y + 2)

    a <- "foo       
        bar"        # One string on two lines
}

然后在R中:

source("example.R")
dput(attr(body(theFunction), "srcref"))

它打印此行/列信息:

list(structure(c(2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L), srcfile = <environment>, class = "srcref"), 
    structure(c(3L, 2L, 3L, 7L, 9L, 14L, 3L, 3L), srcfile = <environment>, class = "srcref"), 
    structure(c(3L, 10L, 3L, 15L, 17L, 22L, 3L, 3L), srcfile = <environment>, class = "srcref"), 
    structure(c(4L, 2L, 5L, 15L, 9L, 15L, 4L, 5L), srcfile = <environment>, class = "srcref"), 
    structure(c(7L, 2L, 8L, 6L, 9L, 20L, 7L, 8L), srcfile = <environment>, class = "srcref"))

正如您所“看到的”(每个结构中的最后两个数字是开始/结束行),表达式a <- 0 and a <- 1映射到同一行...

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码行分析器是否需要解析树,这是否足够? 的相关文章

随机推荐

  • EntityFramework .net 4 用简单的方法更新实体

    我正在看这个问题 ADO net 实体框架 仅更新分离实体上的某些属性 这对我来说是一个很大的帮助 我现在知道在对其进行更改之前需要附加一个实体 但我该怎么做 我有一个 MVC 网站 一个客户更新页面 其中包含以下字段 ID 名称 地址等
  • C++ 全局重载运算符= [重复]

    这个问题在这里已经有答案了 可能的重复 运算符 必须是非静态成员 是什么意思 C Hi 我有以下代码 Header file struct dataRecord size t id char name gcNameLength void o
  • OpenGL 透明度无法正常工作

    我的项目的透明度存在问题 正如您所看到的 透明度对于其他对象来说效果很好 您可以看到树叶后面的犀牛 但问题出在树本身 当有两个分支并且其中一个比另一个更近时 较远的一个是不可见的 与后备箱相同 透明度对对象本身不起作用 这是我在创建纹理时使
  • 如何更改悬停时的内容

    我一直在研究这个 我认为这会很简单 我想做的是将鼠标悬停在 新 标签上 进入悬停状态后 仅使用 CSS 将内容从 NEW 更改为 ADD body font family Arial Helvetica sans serif item wi
  • 在Java中找到二次回归曲线的最佳方法

    我有三组数据 例如 x y 4 0 6 60 8 0 有谁知道任何 有效的 Java 代码可以给我返回 a b 和 c 的值 系数 我假设您想要这种形式的公式 y a x 2 b x c 如果只有三个点 您可以使用以下公式描述经过所有三个点
  • 在 XHR 中使用 multipart/form-data 作为 Content-Type 时收到“400 Bad Request”

    我有一个发送一些数据的 AJAX 请求 数据尊重 multipart form data规格 我面临的问题是浏览器将 Content Type 标头设置为 text plain 它应该是 multipart form data 我尝试这样做
  • JPanel 不绘画,JFrame 保持空白

    我正在开发一款类似于数字口袋妖怪卡牌的游戏 当我尝试绘制任何图像时 JFrame 仍为空 这可能是一个简单的错误 但我一直无法找到解决方案 在 Stack Overflow 上 我看到了很多像我这样的问题 尽管他们的解决方案不适用于我的代码
  • 如何将图像(播放器)旋转到鼠标方向?

    我正在考虑在 pygame 中制作一个 2d 射击游戏 我想让我的玩家 Player 1 指向鼠标方向 我花了几个小时寻找解决方案 并尝试了我能找到的所有解决方案 但没有一个有效 所以你能帮助我吗 这是我的代码 import pygame
  • 纯 JavaScript,onclick 无法在移动设备上运行

    现在我并不是真正的 Javascript 明星 但我似乎遇到了移动设备和 onclick 功能的所有已知问题 Onclick 需要鼠标操作 当然在手机上不适用 现在在 Jquery 中 您可以使用 on 但是这如何与常规 javascrip
  • 无法解析“SingleSignOutFilter”中的“setCasServerUrlPrefix”

    最近升级了依赖 CAS 进行身份验证的 Spring Boot 应用程序后 该项目不再编译 因为setCasServerUrlPrefix找不到方法SingleSignOutFilter java cannot find symbol sy
  • R:覆盖栅格图层的xy坐标

    我有一个带有 XY 像素坐标的栅格 我想将其转换为纬度和经度 class RasterLayer dimensions 1617 1596 2580732 nrow ncol ncell resolution 1 1 x y extent
  • 使用 C# Process 运行可执行程序

    我是一名生物信息学人员 我的工作使用 C 我已经多次使用 C 中的进程来运行可执行程序 这次我有一个新问题 我在 Windows 中下载了一个名为 Blast 的程序的 exe 文件 如果我输入我的命令 blastp query input
  • python 中 GSDMM 的实际示例?

    我想使用 GSDMM 将主题分配给我的数据集中的一些推文 我发现的唯一例子 1 and 2 不够详细 我想知道您是否知道一个显示 GSDMM 是如何使用 python 实现的来源 或者足够关心做一个小例子 我最终编译了 GSDMM 的代码
  • 无法升级Android SDK

    我已经关闭了所有窗口 重新启动了计算机 但 Eclipse 告诉我 C Program Files android sdk tools 正在被访问 我什至删除了该目录 但我仍然得到 如何修复 无法重命名目录 C Program 文件 And
  • 使用 ToString() 格式化时小数和双精度之间的舍入差异

    使用格式化数值时我发现结果存在差异ToString F2 0 125m ToString F2 CultureInfo InvariantCulture 0 13 0 125 ToString F2 CultureInfo Invarian
  • 将所有并排单词成对分割字符串单词[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我需要将字符串分割成单词 然后将每个连续的单词成对连接 如下所示 This is my
  • 检查文件/文件夹访问权限

    我得到一个UnautorizedAccessException运行这段代码 string fileList Directory GetFiles strDir strExt 异常发生在c users username appdata如何检查
  • Worklight 构建错误无法初始化 ClientProjectBuilder

    我突然开始收到如下所示的工作灯构建错误 我不知道为什么它突然开始发生 该代码工作正常 直到我用于 Xcode 构建的远程计算机重新启动 有什么线索可能导致它吗 ipad 构建失败 初始化 ClientProjectBuilder 失败 an
  • Amazon sns(推送通知)不发送到 IOS 应用程序

    最近app收不到通知 android端正常 ios端却失败 所以这就是我的尝试 1 generate token from apple apn service 2 create the endpoint at amazon backend
  • 代码行分析器是否需要解析树,这是否足够?

    我正在尝试确定为某种语言 例如可用于 Python 和 Matlab 的语言 编写线路分析器所需的条件 解释 行分析器 的一种天真的方法是假设可以在每一行周围插入时间记录 但行的定义取决于解析器如何处理空格 这只是第一个问题 似乎需要使用解