相关疑难解决方法(0)

将AST编译回源代码

我目前正在构建一个用PHP编写的PHP解析器,因为在我之前的问题中没有出现现有的解析器.该分析器本身运作得相当好.

现在很明显,解析器本身没什么用(除了静态分析).我想将转换应用于AST,然后将其编译回源代码.应用转换不是一个问题,普通的访客模式应该这样做.

我目前的问题是如何将AST编译回源代码.我看到基本上有两种可能性:

  1. 使用某种预定义方案编译代码
  2. 保留原始代码的格式并仅在已更改的节点上应用1.

现在我想专注于1.因为2.似乎很难完成(但如果你有相关的提示,我想听听它们).

但我不确定哪种设计模式可用于编译代码.我看到实现这一点的最简单方法是->compile向所有节点添加一个方法.我在这里看到的缺点是,更改生成的输出的格式非常困难.人们需要更改节点本身才能做到这一点.因此,我正在寻找一个不同的解决方案.

我听说访客模式也可以用于此,但我无法想象它应该如何工作.据我了解访问者模式,你有一些NodeTraverser在所有节点上递归迭代并调用一个->visit方法Visitor.对于节点操作来说这听起来非常有前景,其中该Visitor->visit方法可以简单地更改它传递的Node,但我不知道它如何用于编译.一个显而易见的想法是将节点树从叶子迭代到根,并用源代码替换访问的节点.但这在某种程度上似乎不是一个非常干净的解决方案?

php compiler-construction abstract-syntax-tree

30
推荐指数
1
解决办法
9053
查看次数

任何R风格指南/检查?

在Python中我习惯于在第8个Python增强提议之后通过一个名为pep8的自动但可配置的工具对我的代码进行"样式检查" .

在RI不知道.谷歌有一个风格指南,但是:

  • 大多数R程序员实际使用了什么?
  • 我仍然没有找到任何执行这些检查的程序.

Dirk,Alex,在你的答案中,你指着我的漂亮的打印机,但在我看来,这将过度一件事而不是另一件事:代码将自动编辑以遵循风格,而没有针对选择不当的标识符发出警告.

r

26
推荐指数
4
解决办法
4915
查看次数

代码重构:从$到[[

我有很多代码使用$运算符而不是[[.我已经阅读了许多优点,[[并希望重构所有代码.

以下方法会有任何问题吗?我怎样才能最好地在Mac上进行搜索并替换为RStudio或TextWrangler?

l <- list()
l$`__a` <- data.frame(`__ID` = stringi::stri_rand_strings(10, 1), col = stringi::stri_rand_strings(10, 1), check.names = F )
Run Code Online (Sandbox Code Playgroud)

代码现在看起来像这样:

l$`__a`$`__ID`
Run Code Online (Sandbox Code Playgroud)

我想重构它:

l[["__a"]][["__ID"]]
Run Code Online (Sandbox Code Playgroud)

为实现这一目标,以下替代品是否足够?

$` to [["

` to "]]
Run Code Online (Sandbox Code Playgroud)

我在我的代码中找到了一个区域,这个方法不起作用,现在我也找到了一个解决方法来避免这个问题:用dplyr避免反引号字符

df <- dat[["__Table"]] %>% select(`__ID` ) %>% mutate(fk_table = "__Table", val = 1)
Run Code Online (Sandbox Code Playgroud)

在进行上面的替换之前,我需要将select函数更改为this以避免错误替换反引号字符:

select_(as.name("__ID"))
Run Code Online (Sandbox Code Playgroud)

遗憾的是,__由于数据是从关系数据库(FileMaker)下载的,并且需要在保留列名的同时将数据写回数据库,因此无法避免使用in列名.

参考文献[[:

关于R中的重构的参考:

textwrangler filemaker r list rstudio

5
推荐指数
1
解决办法
234
查看次数