summary2[3.11-3.17]

主要工作在读Code Completion with Neural Attention and Pointer Networks以及想去实现

Ⅰ Code Completion with Neural Attention and Pointer Networks的实现

github上无本paper的source code,需要自己implement。DataSet是public

1.DataSet

DataSet
150k个 JavaScript 和python code snippet的AST,存储在json文件中。
eg: python
在这里插入图片描述
在这里插入图片描述

2. Data processing

paper中将AST Flatten后进行处理
在这里插入图片描述

我们python读入json文件后,可以一按照原文所说的用BFS可以将AST flatten成一个list。
就比如图片上的那个

x = 7
print x+1

code snippet的AST为:

[ {"type":"Module","children":[1,4]},
    {"type":"Assign","children":[2,3]},
      {"type":"NameStore","value":"x"},
      {"type":"Num","value":"7"},
    {"type":"Print","children":[5]},
      {"type":"BinOpAdd","children":[6,7]},
        {"type":"NameLoad","value":"x"},
        {"type":"Num","value":"1"} ]

按照paper说的,BFS遍历,non-leaf节点的value为empty,处理后为:

[{'type': 'Module', 'value': 'empty'}, 
{'type': 'Assign', 'value': 'empty'},
{'type': 'NameStore', 'value': 'x'},
{'type': 'Num', 'value': '7'},\
{'type': 'Print', 'value': 'empty'},
{'type': 'BinOpAdd', 'value': 'empty'},
{'type': 'NameLoad', 'value': 'x'}, 
{'type': 'Num', 'value': '1'}]

3. confused

1.我没太懂他说的怎么生成的queries
在这里插入图片描述
2. 在这里插入图片描述

这是 attentional LSTM,他的输入是绿色(Type)和黄色(value)的vector concatenate在一起的,如果在test集合中黄色(value)存在rare word,不在vocabulary中,也就没有对应的vector,那这样是如何输入。

3.还有其他一些实现细节上的问题,我在试着解决,但会记录。

4. Next work

先用其他数据实现LSTM,attention NN, point NN。

Ⅱ Code auto-Completion 一些看法

1.之前看基于lexeme的paper实现code completion不算Code auto-Completion

我之前去年和你交流那些基于词法实现code completion看的那几篇论文:

  1. On the Naturalness of Software ICSE2012
  2. Mining Source Code Repositories at Massive Scale using Language Modeling MSR 2013
  3. On the Localness of Software FSE2014
  4. CACHECAA Cache Language Model Based Code ICSE2015

我现在觉得,他们并不算是Code auto-Completion,他们只是把code completion当成task,把自己的model用在已经写好的code上,然后将predict 一个token和原来的token 对比一下。这个不应该称得上自动补全

2 . 我对code auto-completion本身的理解感觉都有偏差

first ,auto-completion一个直观的scenario ,我以前觉得就是在dev 写code的时候,写到

for(int i =0;

我就补全

for(int i =0; i< n ;i++)

还有就是如果是在

#include<stdio.h>
int max(int a, int b)
{
	return a>b?a:b;
}
int main()
{
int a = 1;
int b = 2;
int c;
 c = max(
 
}

写到c = max(```的时候能补全成 ```c=max(a,b)这些是我觉得算是auto–completion的。如果是我理解的这种auto–completion,那就不需要vocabulary,token只源自context。

3 next work

我打算重新看下A Survey of Machine Learning for Big Code and Naturalness因为我的毕设方向和大部分论文都是根据这个找的。

Ⅲ 《编译原理》

我这几天每太看,但有个疑惑我还是没懂就是 ,parse阶段,derivation的过程形成的是parse tree,那AST是怎么得到的?
我在龙书第五章找到一张图,按照对这张图的理解,AST树每个内部节点不再像parse tree是CFG定义的non-terminal node
在这里插入图片描述
由此来看之前antlr解析出来的树(如下图)是parse tree而不是AST,

for(i = 0; i<5;i++)
{
sum = sum +i
}

在这里插入图片描述

上图这个关于for 循环的Tree,对照着JAVA8的grammar可以derivate出现,所以应该是Parse tree。

AST我还得好好看看。

Ⅳ Lexical analyzer and parser(7,Mar ;8,Mar)

我看懂网上给的简单的词法分析器和语法分析器的实现,看懂之后,感觉浪费了时间,因为是用switch…case…框架和最长匹配原则实现了词法分析。简单语法,用了很简单那递归下降算法得出来
https://blog.csdn.net/qq_36097393/article/details/88403887

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章