contribution to research and x my mistakes. I would also like to thank my committee members for their guide and eort of sharing ideas. My work would not become successful without collaboration of my colleagues, especially Dr. Hoan Nguyen, Dr. Tung Nguyen and Hung Nguyen. They did not only support my work, contribute their thoughts, but also share their knowledge to develop my skills and my understanding about SE. Last but foremost, I would like to thanks my parents and other family's members. My parents were the rst to encourage me to follow my PhD degree at Iowa State University. Only with them, I could nd the best motivation to follow my research career, to overcome many barriers that I met. My father, who denied his PhD work to take care of his family, always want me to nish the degree that he could not. My father passed away and could not wait until these days to see I completing his desire. However, the way of his thinking, his excitement in nishing his jobs, his love to contribute to the development of society is the model that I want to follow. I feel proud that I can partly learn his characteristics and use them to deal with a long, hard PhD student career. My mother, who spend all of her love to my family and me, xvi ABSTRACT Software systems are becoming popular. They are used with dierent platforms for dierent applications. Software systems are developed with support from programming languages, which help developers work conveniently. Programming languages can have dierent paradigms with dierent form, syntactic structures, keywords, representation ways. In many cases, however, programming languages are similar in dierent important aspects: 1. They are used to support description of specic tasks, 2. Source codes are written in languages and includes a limit set of distinctive tokens, many tokens are repeated like keywords, function calls, and 3. They follow specic syntactic rules to make machine understanding. Those points also reect the similarity between programming language and natural language. Due to its critical role in many applications, natural language processing (NLP) has been studied much and given many promising results like automatic cross-language translation, speech-to-text, information searching, etc. It is interesting to observe if there are similar characteristics between natural language and programming language and whether techniques in NLP can be reused for programming language processing? Recent works in software engineering (SE) shows that their similarities between NLP and programming language processing and techniques in NLP can be reused for PLP. This dissertation introduces my works with contributions in study of characteristics of programming languages, the models which employed them and the main applications that show the usefulness of the proposed models. Study in both three aspects has draw interests from software engineering community and received awards due to their innovation and applicability I hope that this dissertation will bring a systematic view of how advantage t...