主要工作在读Code Completion with Neural Attention and Pointer Networks以及想去实现
summary
Ⅰ 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看的那几篇论文:
- On the Naturalness of Software ICSE2012
- Mining Source Code Repositories at Massive Scale using Language Modeling MSR 2013
- On the Localness of Software FSE2014
- 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