Syntax-free Programming

Greg Little & Robert Miller


Modern applications often provide scripting interfaces to programmatically control their content. For instance, Microsoft Word allows users to modify documents using Visual Basic. Blender, an open source application for 3d modeling and animation, allows users to write Python scripts to manipulate 3d models. Firefox, a popular web browser, has extensions like Chickenfoot[1] that allow users to modify webpages using Javascript. The Gimp, an open source image editing program, allows users to modify images using LISP. These, and many other applications provide scripting support.

Scripting is useful in these applications to automate repetitive tasks, and to record complicated procedures so that they can be repeated later (or shared with other people). Unfortunately, users must overcome several hurdles in order to write scripts:

Many people who use the applications mentioned above are not familiar with programming. Even those who are may not be familiar with the particular scripting language in use. And if they are, they still need to learn the API for the application. This learning curve is so high that many professional users of these applications do not know how to write scripts for them.


We propose Syntax-free Programming: a programming paradigm that eschews rigid syntax and strives to parse suggestive and loosely grammatical expressions. Consider the expression "left margin 2 inches" in the context of Microsoft Word. This expression suggests the idea of making the left margin of the current document 2 inches wide. It can be expressed in the formal syntax of Visual Basic as ActiveDocument.PageSetup.LeftMargin = InchesToPoints(2). A Syntax-free Programming system will try to automatically generate this code from the original expression.

Diagram depicting syntax free programming
Figure 1. Diagram depicting syntax free programming.

Using this approach, users face a smaller set of hurdles for writing scripts:

Current Work

We have prototyped an SFP system which understands many of the javascript commands available in Chickenfoot for interacting with webpages. We will be conducting a user study to see if people can use this system to accomplish various web browsing tasks without using the mouse, but rather typing in sequences of commands.

We have also prototyped an SFP system which understands the API for Microsoft Word. In this prototype, the expression "left margin 2 inches" generates the Visual Basic command: ActiveDocument.PageSetup.LeftMargin = InchesToPoints(2). We are investigating how to make this system most useful for end-users, since they are more likely to be familiar with the terminology in the user interface, rather than the terminology in the API, and these do not always coincide.

We are working to prototype an SFP system which understands the Java API, and explore the potential benefits this might have for writing Java code.


This work was supported in part by the National Science Foundation under award number IIS-0447800. Any opinions, findings, conclusions or recommendations expressed in this publication are those of the authors and do not necessarily reflect the views of the National Science Foundation.


[1] Michael Bolin, Matthew Webber, Philip Rha, Tom Wilson, and Robert C. Miller. "Automation and Customization of Rendered Web Pages." UIST 2005, pp. 163-172.  Winner of best paper award.