Main Menu

SWELL - Grammar

We won't be reinventing the wheel here, so just extract the SWELL grammar file
swell.vll from the SWELL.zip
file.
You will need the grammar-file to follow the descriptions and examples below.

Introducing VisualLangLab

Our DSL interpreter will need a parser to analyze SWELL scripts,
and since the SWELL grammar is quite elaborate we must use a proper
parser-generator.
However, we would like to avoid the theory and formalisms (as much as possible) and
use the simplest tools and approach.
So, while there are
many good parser generators, our choice for the job is the
simple, user-friendly, and easy to learn VisualLangLab.
To save space, we won't say much about the tool here, but refer interested readers to the
Grammar without Tears article.

Open Grammar in VisualLangLab

The SWELL grammar was developed using VisualLangLab, and you can use the same tool
to inspect and review the grammar.
You can also test-run the grammar by feeding it snippets of SWELL.
Within VisualLangLab, grammars are like gentle herbivores in an open zoo, and they don't
bite your hand if you offer them the wrong kind of leaf or straw.
You can also modify the grammar, and see how that changes its behavior,
and the AST produced.

If you haven't downloaded VisualLangLab yet, get the
VLLS-All.jar
file now. Start VisualLangLab by double-clicking this file
(Linux, Mac OS, and UNIX users will need to chmod +x VisualLangLab.jar).
Select File -> Open from the VisualLangLab main menu,
choose script.vll in the file-chooser dialog, and click the "Open" button.
You should see the grammar-tree for the top-level parser-rule, Suite, displayed
as in Figure-2 below.

Figure 2. Initial grammar view

The GUI's menus, toolbars, and displays, and the grammar-tree's
icons and annotations are explained in the
Grammar without Tears article, but if you need additional help
take a look at The GUI.
And if you need help with the icons or any other part of the grammar-tree, take a look at
Editing the Grammar Tree.
A somewhat more complex (but unfortunately essential) concept is the
VisualLangLab AST.

Grammar Structure

A VisualLangLab grammar contains many separate grammar-trees (or parser-rules).
You can display any grammar-rule by selecting its name in the
toolbar's drop-down list (in the box near the red "A" in Figure-2 above).
All these apparently independent grammar-trees actually constitute one large
tree rooted at the top-level rule (Suite in this case).
You can navigate up any branch of the tree by right-clicking any Reference node
and selecting Go to from the grammar-tree's context-menu as shown in Figure-3 below.

Figure 3. Navigating up the singleTest branch

This process (right-clicking a Reference node and selecting Go to)
can be repeated till you reach a grammar-tree that has no Reference nodes.
The grammar-trees in Figure-4 below trace the path from Suite (the root) through
singleTest, runStatements, stmtEnterText, and swingQuery to treePath.

Figure 4. Navigating grammar-tree references

Later in the article, when we discuss SWELL Internals,
the grammar-trees in Figure-4 will be used to illustrate how application code (in the SWELL interpreter)
is interfaced to the parser. To follow that discussion an understanding of each grammar-tree's
AST will be required. The AST is displayed in the text area to the right of the grammar tree
(see red box marked with a "B" in Figure-2 above). The information
shown is the AST of the currently selected node, so to see the AST of the entire
grammar-tree select (click on) the grammar-tree's root node. Also, the radio button
marked with a "§" (for Depth, near the red "C" in Figure-2 above)
should be selected. More details can be found in
AST Structure.

Test-Running a Grammar-Tree

Actually running a parser-rule with different inputs gives you greater insight into the grammar,
and we recommend trying to run some of the grammar-trees in Figure-4 above.
Figure-5 below shows the simple steps required to test-run the selected grammar tree.
Type the input text into the Parser Test Input area (the red box marked "A"),
click the Parse input button (near the red "B"), then validate the parser's
output (after the words result follows: in the red box marked "C"). If you see any
error messages in red in place of the parser's result, the input did not match the
grammar.

Figure 5. Testing the treePath grammar-tree

Figure-6 below shows the stmtEnterText parser-rule
(middle of Figure-4 above) being tested.
Observe that to parse the input provided, stmtEnterText needs to invoke
swingQuery as well, but does not require treePath.

Figure 6. Testing the stmtEnterText grammar-tree

Testing Parsers has more detailed information
about approaches to testing within the VisualLangLab GUI.