CRAQL: A Composable Language for Querying Source Code

by   Blake Johnson, et al.

This paper describes the design and implementation of CRAQL (Composable Repository Analysis and Query Language), a new query language for source code. The growth of source code mining and its applications suggest the need for a query language that can fully utilize and correlate across the unique structure and metadata of parsed source code. CRAQL is built on an underlying abstraction analogous to the underpinnings of SQL, but aimed at parsed source code. Thus, while SQL queries' inputs and outputs are sets of tuples, CRAQL queries' inputs and outputs are sets of abstract syntax trees (ASTs). This abstraction makes CRAQL queries composable (the output of one query can become the input to another) and improves the power of the language by allowing for querying of the tree structure and metadata, as well as raw text. Furthermore, the abstraction enables tree-specific language optimizations and allows CRAQL to be easily applied to any language that is parsable into ASTs. These attributes, along with a familiar syntax similar to SQL, allow complex queries to be expressed in a compact, straightforward manner. Questions such as "find the longest series of statements without any loops," "find methods that are never called," "find getters (0-parameter methods with a single statement that returns a member variable)," or "find the percentage of variables declared at the top of a block" all translate to simple, understandable queries in CRAQL. In this paper we describe the language, its features and capabilities. We compare CRAQL to other languages for querying source code and find that it has potential advantages in clarity and compactness. We discuss the features and optimizations added to support searching parse tree collections effectively and efficiently. Finally, we summarize the application of the language to millions of Java source files, the details of which are in a companion paper.



There are no comments yet.


page 1

page 2

page 3

page 4


CodeSum: Translate Program Language to Natural Language

During software maintenance, programmers spend a lot of time on code com...

SchenQL -- A Domain-Specific Query Language on Bibliographic Metadata

Information access needs to be uncomplicated, users rather use incorrect...

Source Forager: A Search Engine for Similar Source Code

Developers spend a significant amount of time searching for code: e.g., ...

Automated Query Generation for Design Pattern Mining in Source Code

Identifying which design patterns already exist in source code can help ...

Extensible Data Skipping

Data skipping reduces I/O for SQL queries by skipping over irrelevant da...

Augmenting Source Code Lines with Sample Variable Values

Source code is inherently abstract, which makes it difficult to understa...

Exploring the Generality of a Java-based Loop Action Model for the Quorum Programming Language

Many algorithmic steps require more than one statement to implement, but...
This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.