Skip to main content

[vll~svn:236] Updates for VLL-52, VLL-53, and VLL-54.

  • From: sanjay_dasgupta@...
  • To: commits@...
  • Subject: [vll~svn:236] Updates for VLL-52, VLL-53, and VLL-54.
  • Date: Sat, 10 Dec 2011 05:24:00 +0000

Project:    vll
Repository: svn
Revision:   236
Author:     sanjay_dasgupta
Date:       2011-12-10 05:23:57 UTC
Link:       

Log Message:
------------
Updates for VLL-52, VLL-53, and VLL-54.


Revisions:
----------
236


Modified Paths:
---------------
trunk/VLLS/src/vll/gui/Images.scala
trunk/VLLS/src/vll/core/FileIO.scala
trunk/VLLS/src/vll/gui/TreeNodePopupMenu.scala
trunk/VLLS/src/vll/gui/VllGui.scala
trunk/VLLS/src/vll/gui/ElementIcon.scala
trunk/VLLS/src/vll/gui/RuleTreeUtility.scala


Added Paths:
------------
trunk/VLLS/src/vll/gui/samples/PS2EArithExpr.scala
trunk/VLLS/src/vll/gui/samples/TDARExpr.scala
trunk/VLLS/src/vll/gui/samples/TDARExprAST.scala
trunk/VLLS/src/vll/gui/samples/TDARExprActions.scala
trunk/VLLS/src/vll/gui/samples/PS2ESimpleJSON.scala
trunk/VLLS/src/vll/gui/samples/P2SEArithExprAction.scala


Diffs:
------
Index: trunk/VLLS/src/vll/gui/VllGui.scala
===================================================================
--- trunk/VLLS/src/vll/gui/VllGui.scala (revision 235)
+++ trunk/VLLS/src/vll/gui/VllGui.scala (revision 236)
@@ -63,7 +63,7 @@
 import vll.core.Automata
 import vll.core.ScalaEngine
 import vll.core.Utils
-import vll.gui.samples.{ArithExpr, ArithExprWithActionCode, SimpleJSON}
+import vll.gui.samples.{TDARExpr, PS2EArithExpr, P2SEArithExprAction, 
PS2ESimpleJSON, TDARExprAST, TDARExprActions}
 
 class VllGui extends MainFrame with ActionListener {
 //  VllGui.splash("0")
@@ -416,24 +416,30 @@
 
   def createNewToken(isRegex: Boolean) {
     val pattern = if (isRegex)
-      """([a-zA-Z_$][a-zA-Z_$0-9-]*(?:-\d+)?)\s+(\S.*)""".r
+      "([a-zA-Z_$][a-zA-Z_$0-9-]*(?:~\\d+)?)(\\s*,\\s*|\\s+)(\\S.*)?".r
     else
-      """([a-zA-Z_$][a-zA-Z_$0-9-]*)\s+(\S.*)""".r
+      "([a-zA-Z_$][a-zA-Z_$0-9-]*)(\\s*,\\s*|\\s+)(\\S.*)?".r
     val regOrLit = if (isRegex) "regex" else "literal"
     val inputDescription = "name, space(s), %s-pattern".format(regOrLit)
-    val msg = "Enter " + inputDescription + ".\n(Comma separator dropped in 
ver-7.01+)"
+    val msg = "Enter " + inputDescription
     Dialog.showInput(splitPane, msg, ("New " + regOrLit), 
Dialog.Message.Question, null, Array[String](), null) match {
       case Some(tokenInfo) =>
         tokenInfo.trim match {
-          case pattern(name, value) => 
-            if (value.startsWith(",")) {
+          case pattern(name, space, value) => 
+            if (space.trim.length == 0)
+                validateAndAssignTokenValue(true, isRegex, name, value)
+            else if (space.startsWith(",")) {
+              Dialog.showMessage(splitPane, "Bad input. Need: " + 
inputDescription + 
+                ".\nComma separator dropped in ver-7.01+",
+                "ERROR - New " + (regOrLit), Dialog.Message.Error, null)
+            } else {
+              val pat = if (value eq null) "," else (space + value).trim
               if (Dialog.showConfirmation(splitPane, "Create %s with pattern 
\'%s\' ?"
-                  .format(regOrLit, value) + "\n(Comma separator dropped in 
ver-7.01+)", 
+                  .format(regOrLit, pat) + 
+                  (if (value eq null) "" else "\n(Comma separator dropped in 
ver-7.01+)"), 
                   "CONFIRM - New %s".format(regOrLit), 
                   Dialog.Options.OkCancel, Dialog.Message.Question, null) == 
Dialog.Result.Ok)
-                validateAndAssignTokenValue(true, isRegex, name, value)
-            } else {
-                validateAndAssignTokenValue(true, isRegex, name, value)
+                validateAndAssignTokenValue(true, isRegex, name, pat)
             }
           case _ =>
             Dialog.showMessage(splitPane, "Bad input. Need: " + 
inputDescription + 
@@ -695,23 +701,39 @@
         new ScalaLicenseHelper(mainFrame).presentAboutDialog()
     }
   }
-  val helpSampleItem1 = new MenuItem("ArithExpr") {
+  val helpSampleTdarExpr = new MenuItem("TDAR-Expr") {
     reactions += {
-      case ButtonClicked(_) => new ArithExpr(mainFrame).load()
+      case ButtonClicked(_) => new TDARExpr(mainFrame).load()
     }
   }
-  val helpSampleItem2 = new MenuItem("SimpleJSON") {
+  val helpSampleTdarExprWithActions = new MenuItem("TDAR-Expr-Actions") {
     reactions += {
-      case ButtonClicked(_) => new SimpleJSON(mainFrame).load()
+      case ButtonClicked(_) => new TDARExprActions(mainFrame).load()
     }
   }
-  val helpSampleItem3 = new MenuItem("ArithExpr with action-code") {
+  val helpSampleTdarExprAST = new MenuItem("TDAR-Expr-AST") {
     reactions += {
-      case ButtonClicked(_) => new ArithExprWithActionCode(mainFrame).load()
+      case ButtonClicked(_) => new TDARExprAST(mainFrame).load()
     }
   }
+  val helpSamplePS2EArithExpr = new MenuItem("PS2E-ArithExpr") {
+    reactions += {
+      case ButtonClicked(_) => new PS2EArithExpr(mainFrame).load()
+    }
+  }
+  val helpSamplePS2ESimpleJSON = new MenuItem("PS2E-SimpleJSON") {
+    reactions += {
+      case ButtonClicked(_) => new PS2ESimpleJSON(mainFrame).load()
+    }
+  }
+  val helpSamplePS2EArithExprAction = new MenuItem("PS2E-ArithExpr with 
action-code") {
+    reactions += {
+      case ButtonClicked(_) => new P2SEArithExprAction(mainFrame).load()
+    }
+  }
   val helpSamples = new Menu("Sample grammars") {
-    contents.append(helpSampleItem1, helpSampleItem2, helpSampleItem3)
+    contents.append(helpSampleTdarExpr, helpSampleTdarExprWithActions, 
helpSampleTdarExprAST, 
+                    new Separator, helpSamplePS2EArithExpr, 
helpSamplePS2ESimpleJSON, helpSamplePS2EArithExprAction)
   }
   val helpMenuItem = new MenuItem("Help") {
     val msg = "Check for documentation at http://vll.java.net";
@@ -805,10 +827,10 @@
   val outerSplitPane = new SplitPane(Orientation.Horizontal, splitPane, 
logTextPane) {
   }
 
-  val vllIconImage = 
swing.Swing.Icon(getClass.getResource("images/Icon.gif"))
-  iconImage = vllIconImage.getImage
+  iconImage = Images.icon.getImage
   title = "VisualLangLab/S"
-  val grammarFileChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
+  
+  lazy val grammarFileChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
     fileSelectionMode = FileChooser.SelectionMode.FilesOnly
     multiSelectionEnabled = false
     fileFilter = new FileFilter() {
@@ -816,7 +838,7 @@
       def getDescription = "VisualLangLab grammar (vll) file"
     }
   }
-  val tokenLibraryChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
+  lazy val tokenLibraryChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
     fileSelectionMode = FileChooser.SelectionMode.FilesOnly
     multiSelectionEnabled = false
     fileFilter = new FileFilter() {
@@ -824,8 +846,7 @@
       def getDescription = "Token library (vll) file"
     }
   }
-
-  val inFileChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
+  lazy val inFileChooser = new FileChooser(new 
File(System.getProperty("user.dir"))) {
     fileSelectionMode = FileChooser.SelectionMode.FilesAndDirectories
     multiSelectionEnabled = false
     fileFilter = new FileFilter() {
Index: trunk/VLLS/src/vll/gui/ElementIcon.scala
===================================================================
--- trunk/VLLS/src/vll/gui/ElementIcon.scala    (revision 235)
+++ trunk/VLLS/src/vll/gui/ElementIcon.scala    (revision 236)
@@ -23,15 +23,20 @@
 import java.awt.{Component, Graphics}
 import javax.swing.{Icon}
 import vll.core.RuleTreeNode
-import scala.swing.Swing
 
 class ElementIcon(val node: RuleTreeNode, val selected: Boolean) extends 
javax.swing.Icon {
 
-  lazy val image = if ((node eq null) || 
!ElementIcon.iconImageName.contains(node.getClass.getSimpleName)) 
-    null 
-  else 
-    Swing.Icon(getClass.getResource("images/" + 
-      ElementIcon.iconImageName(node.getClass.getSimpleName))).getImage
+  lazy val image = (node.getClass.getSimpleName match {
+    case "ChoiceNode" => Images.choice
+    case "LiteralNode" => Images.literal
+    case "PredicateNode" => Images.predicate
+    case "ReferenceNode" => Images.reference
+    case "RegexNode" => Images.regex
+    case "RepSepNode" => Images.repSep
+    case "RootNode" => Images.root
+    case "SequenceNode" => Images.sequence
+    case "WildCardNode" => Images.wildCard
+  }) getImage
 
   lazy val getIconHeight = if (image eq null) 0 else image.getHeight(null)
   lazy val getIconWidth = if (image eq null) 0 else image.getWidth(null)
@@ -41,16 +46,3 @@
   }
 }
 
-object ElementIcon {
-  val iconImageName = Map(
-    "ChoiceNode" -> "Choice.gif",
-    "LiteralNode" -> "Literal.gif",
-    "RegexNode" -> "Regex.gif",
-    "RepSepNode" -> "RepSep.gif",
-    "RootNode" -> "Root.gif",
-    "ReferenceNode" -> "Reference.gif",
-    "SequenceNode" -> "Sequence.gif",
-    "PredicateNode" -> "SemPred.gif",
-    "WildCardNode" -> "WildCard.gif"
-  )
-}
Index: trunk/VLLS/src/vll/gui/Images.scala
===================================================================
--- trunk/VLLS/src/vll/gui/Images.scala (revision 235)
+++ trunk/VLLS/src/vll/gui/Images.scala (revision 236)
@@ -23,36 +23,39 @@
 import scala.swing.Swing
 
 object Images {
-  val errorMark = Swing.Icon(getClass.getResource("images/ErrorMark.gif"))
+  val alignLeft16 = 
Swing.Icon(getClass.getResource("images/AlignLeft16.gif"))
+  val back16 = Swing.Icon(getClass.getResource("images/Back16.gif"))
+  val choice = Swing.Icon(getClass.getResource("images/Choice.gif"))
+  val clear16 = Swing.Icon(getClass.getResource("images/Clear16.gif"))
   val commitMark = Swing.Icon(getClass.getResource("images/CommitMark.gif"))
-  val new16 = Swing.Icon(getClass.getResource("images/New16.gif"))
-  val open16 = Swing.Icon(getClass.getResource("images/Open16.gif"))
-  val save16 = Swing.Icon(getClass.getResource("images/Save16.gif"))
-  val saveAs16 = Swing.Icon(getClass.getResource("images/SaveAs16.gif"))
-  val newReference = 
Swing.Icon(getClass.getResource("images/NewReference.gif"))
-  val refresh16 = Swing.Icon(getClass.getResource("images/Refresh16.gif"))
+  val copy16 = Swing.Icon(getClass.getResource("images/Copy16.gif"))
+  val cut16 = Swing.Icon(getClass.getResource("images/Cut16.gif"))
   val delete16 = Swing.Icon(getClass.getResource("images/Delete16.gif"))
-  val search16 = Swing.Icon(getClass.getResource("images/Search16.gif"))
-  val newLiteral = Swing.Icon(getClass.getResource("images/NewLiteral.gif"))
-  val newRegex = Swing.Icon(getClass.getResource("images/NewRegex.gif"))
   val edit16 = Swing.Icon(getClass.getResource("images/Edit16.gif"))
-  val replace16 = Swing.Icon(getClass.getResource("images/Replace16.gif"))
-  val import16 = Swing.Icon(getClass.getResource("images/Import16.gif"))
+  val errorMark = Swing.Icon(getClass.getResource("images/ErrorMark.gif"))
   val export16 = Swing.Icon(getClass.getResource("images/Export16.gif"))
-  val alignLeft16 = 
Swing.Icon(getClass.getResource("images/AlignLeft16.gif"))
   val host16 = Swing.Icon(getClass.getResource("images/Host16.gif"))
   val icon = Swing.Icon(getClass.getResource("images/Icon.gif"))
-  val clear16 = Swing.Icon(getClass.getResource("images/Clear16.gif"))
-  val copy16 = Swing.Icon(getClass.getResource("images/Copy16.gif"))
-  val cut16 = Swing.Icon(getClass.getResource("images/Cut16.gif"))
-  val stop16 = Swing.Icon(getClass.getResource("images/Stop16.gif"))
-  val back16 = Swing.Icon(getClass.getResource("images/Back16.gif"))
+  val import16 = Swing.Icon(getClass.getResource("images/Import16.gif"))
+  val literal = Swing.Icon(getClass.getResource("images/Literal.gif"))
+  val new16 = Swing.Icon(getClass.getResource("images/New16.gif"))
+  val newLiteral = Swing.Icon(getClass.getResource("images/NewLiteral.gif"))
+  val newReference = 
Swing.Icon(getClass.getResource("images/NewReference.gif"))
+  val newRegex = Swing.Icon(getClass.getResource("images/NewRegex.gif"))
+  val open16 = Swing.Icon(getClass.getResource("images/Open16.gif"))
   val paste16 = Swing.Icon(getClass.getResource("images/Paste16.gif"))
-  val sequence = Swing.Icon(getClass.getResource("images/Sequence.gif"))
-  val choice = Swing.Icon(getClass.getResource("images/Choice.gif"))
+  val predicate = Swing.Icon(getClass.getResource("images/SemPred.gif"))
   val reference = Swing.Icon(getClass.getResource("images/Reference.gif"))
+  val refresh16 = Swing.Icon(getClass.getResource("images/Refresh16.gif"))
+  val regex = Swing.Icon(getClass.getResource("images/Regex.gif"))
   val repSep = Swing.Icon(getClass.getResource("images/RepSep.gif"))
+  val replace16 = Swing.Icon(getClass.getResource("images/Replace16.gif"))
+  val root = Swing.Icon(getClass.getResource("images/Root.gif"))
+  val save16 = Swing.Icon(getClass.getResource("images/Save16.gif"))
+  val saveAs16 = Swing.Icon(getClass.getResource("images/SaveAs16.gif"))
+  val search16 = Swing.Icon(getClass.getResource("images/Search16.gif"))
+  val sequence = Swing.Icon(getClass.getResource("images/Sequence.gif"))
+  val stop16 = Swing.Icon(getClass.getResource("images/Stop16.gif"))
   val token = Swing.Icon(getClass.getResource("images/Token.gif"))
-  val predicate = Swing.Icon(getClass.getResource("images/SemPred.gif"))
   val wildCard = Swing.Icon(getClass.getResource("images/WildCard.gif"))
 }
Index: trunk/VLLS/src/vll/gui/RuleTreeUtility.scala
===================================================================
--- trunk/VLLS/src/vll/gui/RuleTreeUtility.scala        (revision 235)
+++ trunk/VLLS/src/vll/gui/RuleTreeUtility.scala        (revision 236)
@@ -259,7 +259,8 @@
       }
       if (astStructurePanel.isGlobal)
         stack.pop()
-      applyMultiplicity(basicType, node, margin)
+      val multType = applyMultiplicity(basicType, node, margin)
+      if (node.description.isEmpty) multType else "%s (%s)".format(multType, 
node.description)
     }
   }
   displayAstStruct()
Index: trunk/VLLS/src/vll/gui/TreeNodePopupMenu.scala
===================================================================
--- trunk/VLLS/src/vll/gui/TreeNodePopupMenu.scala      (revision 235)
+++ trunk/VLLS/src/vll/gui/TreeNodePopupMenu.scala      (revision 236)
@@ -54,9 +54,6 @@
     errorMsg.setEnabled(!isRootNode)
     errorMsg.setSelected(errorMsg.isEnabled && selectedNode.errorMessage == 
"")
 
-    description.setEnabled(selectedNode.pNode.isInstanceOf[SequenceNode] || 
selectedNode.pNode.isInstanceOf[ChoiceNode] || 
-        selectedNode.pNode.isInstanceOf[RepSepNode] || 
selectedNode.pNode.isInstanceOf[PredicateNode])
-
     val mv = Array(multOne, multZeroOrOne, multZeroOrMore, multOneOrMore, 
multNot, multGuard)
     mv(selectedNode.multiplicity.id).setSelected(true)
     multOne.setEnabled(!selectedNode.pNode.isInstanceOf[RepSepNode])
Index: trunk/VLLS/src/vll/gui/samples/SimpleJSON.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/SimpleJSON.scala     (revision 235)
+++ trunk/VLLS/src/vll/gui/samples/SimpleJSON.scala     (revision 236)
@@ -1,111 +0,0 @@
-/*
- Copyright 2010, Sanjay Dasgupta
- sanjay.dasgupta@...
-
- This file is part of VisualLangLab (http://vll.java.net/).
-
- VisualLangLab is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- VisualLangLab is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package vll.gui.samples
-
-import scala.swing.Dialog
-import scala.swing.Label
-import vll.gui.VllGui
-
-class SimpleJSON(gui: VllGui) {
-
-  def load() {
-    val msg = """<html><body><pre>
-SimpleJSON is based on the parser described at page 764 of
-"Programming in Scala" (http://www.artima.com/shop/programming_in_scala_2ed)
-A description of the same parser can also be found here:
-http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
-
-IMPORTANT: Remember to have the top-level parser (Value) selected when 
running
-the parser.
-
-You can find sample input in the book or PDF document referred above.
-</pre></body></html>"""
-
-    gui.parsers.reset()
-    gui.parsers.load(grammar)
-    val firstRule = gui.parsers.ruleBank.ruleNames(0)
-    gui.updateRuleChooser(firstRule)
-    gui.title = "VisualLangLab/S - SimpleJSON"
-    gui.ruleTreePanel.setRule(firstRule)
-//    gui.logTextPane.clearLogText()
-    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
-        "VisualLangLab sample - SimpleJSON", Dialog.Message.Info, null)
-  }
-
-  val grammar = <VLL-Grammar>
-  <Whitespace>\\s+</Whitespace>
-  <Comments></Comments>
-  <Tokens>
-    <Literal Name="RBKT" Pattern="]"/>
-    <Literal Name="COLON" Pattern=":"/>
-    <Literal Name="NULL" Pattern="null"/>
-    <Regex Name="floatingPointNumber" 
Pattern="\\-?(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
-    <Regex Name="stringLiteral" Pattern="\&quot;[^&quot;]*\&quot;"/>
-    <Literal Name="FALSE" Pattern="false"/>
-    <Literal Name="LBKT" Pattern="["/>
-    <Literal Name="COMMA" Pattern=","/>
-    <Literal Name="TRUE" Pattern="true"/>
-    <Literal Name="LCURLY" Pattern="{"/>
-    <Literal Name="RCURLY" Pattern="}"/>
-  </Tokens>
-  <Parsers>
-    <Parser Name="Value">
-        <Choice ErrMsg="illegal start of value" Description="The JSON 
alternative forms">
-          <Reference Ref="obj" />
-          <Reference Ref="arr" />
-          <Token Ref="stringLiteral" />
-          <Token Ref="floatingPointNumber" />
-          <Token Ref="NULL" />
-          <Token Ref="TRUE" />
-          <Token Ref="FALSE" />
-        </Choice>
-    </Parser>
-    <Parser Name="member">
-        <Sequence Description="A JSON member&apos;s structure">
-          <Token Ref="stringLiteral" />
-          <Token Ref="COLON" />
-          <Reference Ref="Value" />
-        </Sequence>
-    </Parser>
-    <Parser Name="arr">
-        <Sequence Description="A JSON array&apos;s structure ">
-          <Token Ref="LBKT" />
-          <RepSep Mult="*">
-            <Reference Ref="Value" />
-            <Token Ref="COMMA" />
-          </RepSep>
-          <Token Ref="RBKT" />
-        </Sequence>
-    </Parser>
-    <Parser Name="obj">
-        <Sequence Description="A JSON object&apos;s structure">
-          <Token Ref="LCURLY" />
-          <RepSep Mult="*">
-            <Reference Ref="member" />
-            <Token Ref="COMMA" />
-          </RepSep>
-          <Token Ref="RCURLY" />
-        </Sequence>
-    </Parser>
-  </Parsers>
-</VLL-Grammar>
-}
-
Index: trunk/VLLS/src/vll/gui/samples/ArithExpr.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/ArithExpr.scala      (revision 235)
+++ trunk/VLLS/src/vll/gui/samples/ArithExpr.scala      (revision 236)
@@ -1,117 +0,0 @@
-/*
- Copyright 2010, Sanjay Dasgupta
- sanjay.dasgupta@...
-
- This file is part of VisualLangLab (http://vll.java.net/).
-
- VisualLangLab is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- VisualLangLab is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package vll.gui.samples
-
-import scala.swing.Dialog
-import scala.swing.Label
-import vll.gui.VllGui
-
-class ArithExpr(val gui: VllGui) {
-
-  def load() {
-    val msg = """<html><body><pre>
-ArithExpr implements the parser described at page 760 of "Programming in 
Scala, 
-Second Edition" (http://www.artima.com/shop/programming_in_scala_2ed)
-A description of the same parser can also be found here:
-http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
-
-Another version of this parser with action-code that evaluages the 
-expression to a number is also packaged with VisualLangLab.
-
-IMPORTANT: Remember to have the top-level parser (Expr) selected when running
-the parser.
-
-Sample input (remove quotes): "(2 + 3) * (7 - 3)"
-Output: Array(Array(Pair(1, Array(Array(Pair(0, 2), List()), 
-    List(Pair(0, Array(Pair(0, 3), List()))))), List(Pair(0, 
-    Pair(1, Array(Array(Pair(0, 7), List()), List(Pair(1, 
-    Array(Pair(0, 3), List())))))))), List())
-
-</pre></body></html>"""
-    gui.parsers.reset()
-    gui.parsers.load(grammar)
-    val firstRule = gui.parsers.ruleBank.ruleNames(0)
-    gui.updateRuleChooser(firstRule)
-    gui.title = "VisualLangLab/S - ArithExpr"
-    gui.ruleTreePanel.setRule(firstRule)
-//    gui.logTextPane.clearLogText()
-    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
-        "VisualLangLab sample - ArithExpr", Dialog.Message.Info, null)
-  }
-
-  val grammar = <VLL-Grammar>
-  <Whitespace>\\s+</Whitespace>
-  <Comments></Comments>
-  <Tokens>
-    <Literal Name="RPAREN" Pattern=")"/>
-    <Regex Name="floatingPointNumber" 
Pattern="(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
-    <Literal Name="MULT" Pattern="*"/>
-    <Literal Name="LPAREN" Pattern="("/>
-    <Literal Name="MINUS" Pattern="-"/>
-    <Literal Name="DIV" Pattern="/"/>
-    <Literal Name="PLUS" Pattern="+"/>
-  </Tokens>
-  <Parsers>
-    <Parser Name="Expr">
-        <Sequence Description="The &apos;expr&apos; parser-rule&apos;s 
structure">
-          <Reference Ref="term" />
-          <Choice Mult="*" Description="PLUS or MINUS">
-            <Sequence >
-              <Token Ref="PLUS" Drop="true"/>
-              <Reference Ref="term" />
-            </Sequence>
-            <Sequence >
-              <Token Ref="MINUS" Drop="true"/>
-              <Reference Ref="term" />
-            </Sequence>
-          </Choice>
-        </Sequence>
-    </Parser>
-    <Parser Name="factor">
-        <Choice Description="The &apos;factor&apos; parser-rule&apos;s 
structure">
-          <Token Ref="floatingPointNumber" />
-          <Sequence >
-            <Token Ref="LPAREN" Drop="true"/>
-            <Reference Ref="Expr" />
-            <Token Ref="RPAREN" Drop="true"/>
-          </Sequence>
-        </Choice>
-    </Parser>
-    <Parser Name="term">
-        <Sequence Description="The &apos;term&apos; parser-rule&apos;s 
structure">
-          <Reference Ref="factor" />
-          <Choice Mult="*" Description="MULT or DIV">
-            <Sequence >
-              <Token Ref="MULT" Drop="true"/>
-              <Reference Ref="factor" />
-            </Sequence>
-            <Sequence >
-              <Token Ref="DIV" Drop="true"/>
-              <Reference Ref="factor" />
-            </Sequence>
-          </Choice>
-        </Sequence>
-    </Parser>
-  </Parsers>
-</VLL-Grammar>
-
-}
-
Index: trunk/VLLS/src/vll/gui/samples/ArithExprWithActionCode.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/ArithExprWithActionCode.scala        
(revision 235)
+++ trunk/VLLS/src/vll/gui/samples/ArithExprWithActionCode.scala        
(revision 236)
@@ -1,116 +0,0 @@
-/*
- Copyright 2010, Sanjay Dasgupta
- sanjay.dasgupta@...
-
- This file is part of VisualLangLab (http://vll.java.net/).
-
- VisualLangLab is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- VisualLangLab is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package vll.gui.samples
-
-import scala.swing.{Dialog, Label, Swing}
-import scala.concurrent.ops
-import vll.gui.VllGui
-
-class ArithExprWithActionCode(val gui: VllGui) {
-
-  def load() {
-    val msg = """<html><body><pre>
-ArithExprWithActionCode augments the parser described at page 760 of 
-"Programming in Scala, Second Edition" 
(http://www.artima.com/shop/programming_in_scala_2ed
-with action-code that actually evaluates the expression.
-A description of the same parser can also be found here:
-http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
-
-IMPORTANT: Remember to have the top-level parser (Expr) selected when running
-the parser.
-
-Sample input (remove quotes): "(2 + 3) * (7 - 3)"
-Output: 20
-
-</pre></body></html>"""
-    gui.parsers.reset()
-    ops.spawn {
-      gui.parsers.load(grammar)
-      val firstRule = gui.parsers.ruleBank.ruleNames(0)
-      Swing.onEDT {
-        gui.updateRuleChooser(firstRule)
-        gui.ruleTreePanel.setRule(firstRule)
-      }
-    }
-    gui.title = "VisualLangLab/S - ArithExprWithActionCode"
-//    gui.logTextPane.clearLogText()
-    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
-        "VisualLangLab sample - ArithExprWithActionCode", 
Dialog.Message.Info, null)
-  }
-
-  val grammar = <VLL-Grammar>
-  <Whitespace>\\s+</Whitespace>
-  <Comments></Comments>
-  <Tokens>
-    <Literal Name="RPAREN" Pattern=")"/>
-    <Regex Name="floatingPointNumber" 
Pattern="(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
-    <Literal Name="MULT" Pattern="*"/>
-    <Literal Name="LPAREN" Pattern="("/>
-    <Literal Name="MINUS" Pattern="-"/>
-    <Literal Name="DIV" Pattern="/"/>
-    <Literal Name="PLUS" Pattern="+"/>
-  </Tokens>
-  <Parsers>
-    <Parser Name="Expr">
-        <Sequence ActionText="function (arg) {&#xA;  if (!arg) {&#xA;    
return;&#xA;  }&#xA;  var expr = arg[0];&#xA;  var list = arg[1];&#xA;  for 
(var i = 0; i &lt; list.length; ++i) {&#xA;    var pair = list[i];&#xA;    
switch (pair[0]) {&#xA;    case 0:&#xA;      expr += pair[1]; break;&#xA;    
case 1:&#xA;      expr -= pair[1]; break;&#xA;    }&#xA;  }&#xA;  return 
expr;&#xA;}" Description="The &apos;expr&apos; parser-rule&apos;s structure">
-          <Reference Ref="term" />
-          <Choice Mult="*" Description="PLUS or MINUS">
-            <Sequence >
-              <Token Ref="PLUS" Drop="true"/>
-              <Reference Ref="term" />
-            </Sequence>
-            <Sequence >
-              <Token Ref="MINUS" Drop="true"/>
-              <Reference Ref="term" />
-            </Sequence>
-          </Choice>
-        </Sequence>
-    </Parser>
-    <Parser Name="factor">
-        <Choice ActionText="function (arg) {&#xA;  if (!arg) {&#xA;    
return;&#xA;  }&#xA;  switch (arg[0]) {&#xA;  case 0:&#xA;    return 
parseFloat(arg[1]); break;&#xA;  case 1: &#xA;    return arg[1]; break;&#xA;  
} &#xA;}" Description="The &apos;factor&apos; parser-rule&apos;s structure">
-          <Token Ref="floatingPointNumber" />
-          <Sequence >
-            <Token Ref="LPAREN" Drop="true"/>
-            <Reference Ref="Expr" />
-            <Token Ref="RPAREN" Drop="true"/>
-          </Sequence>
-        </Choice>
-    </Parser>
-    <Parser Name="term">
-        <Sequence ActionText="(a: Any) =&gt; a match {&#xA;  case null =&gt; 
null&#xA;  case Array(f: Double, lst:List[_]) =&gt; &#xA;    var res = f&#xA; 
   lst.foreach(_ match {&#xA;      case Pair(0, f2:Double) =&gt; res *= 
f2&#xA;      case Pair(1, f2:Double) =&gt; res /= f2&#xA;    })&#xA;    
res&#xA;}" Description="The &apos;term&apos; parser-rule&apos;s structure">
-          <Reference Ref="factor" />
-          <Choice Mult="*" Description="MULT or DIV">
-            <Sequence >
-              <Token Ref="MULT" Drop="true"/>
-              <Reference Ref="factor" />
-            </Sequence>
-            <Sequence >
-              <Token Ref="DIV" Drop="true"/>
-              <Reference Ref="factor" />
-            </Sequence>
-          </Choice>
-        </Sequence>
-    </Parser>
-  </Parsers>
-</VLL-Grammar>
-
-}
-
Index: trunk/VLLS/src/vll/gui/samples/PS2ESimpleJSON.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/PS2ESimpleJSON.scala (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/PS2ESimpleJSON.scala (revision 236)
@@ -0,0 +1,111 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.Dialog
+import scala.swing.Label
+import vll.gui.VllGui
+
+class PS2ESimpleJSON(gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example is based on the parser described at page 764 of
+"Programming in Scala" (http://www.artima.com/shop/programming_in_scala_2ed)
+A description of the same parser can also be found here:
+http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
+
+IMPORTANT: Remember to have the top-level parser (Value) selected when 
running
+the parser.
+
+You can find sample input in the book or PDF document referred above.
+</pre></body></html>"""
+
+    gui.parsers.reset()
+    gui.parsers.load(grammar)
+    val firstRule = gui.parsers.ruleBank.ruleNames(0)
+    gui.updateRuleChooser(firstRule)
+    gui.title = "VisualLangLab/S - PS2E-SimpleJSON"
+    gui.ruleTreePanel.setRule(firstRule)
+//    gui.logTextPane.clearLogText()
+    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
+        "VisualLangLab sample - PS2E-SimpleJSON", Dialog.Message.Info, null)
+  }
+
+  val grammar = <VLL-Grammar>
+  <Whitespace>\\s+</Whitespace>
+  <Comments></Comments>
+  <Tokens>
+    <Literal Name="RBKT" Pattern="]"/>
+    <Literal Name="COLON" Pattern=":"/>
+    <Literal Name="NULL" Pattern="null"/>
+    <Regex Name="floatingPointNumber" 
Pattern="\\-?(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
+    <Regex Name="stringLiteral" Pattern="\&quot;[^&quot;]*\&quot;"/>
+    <Literal Name="FALSE" Pattern="false"/>
+    <Literal Name="LBKT" Pattern="["/>
+    <Literal Name="COMMA" Pattern=","/>
+    <Literal Name="TRUE" Pattern="true"/>
+    <Literal Name="LCURLY" Pattern="{"/>
+    <Literal Name="RCURLY" Pattern="}"/>
+  </Tokens>
+  <Parsers>
+    <Parser Name="Value">
+        <Choice ErrMsg="illegal start of value" Description="The JSON 
alternative forms">
+          <Reference Ref="obj" />
+          <Reference Ref="arr" />
+          <Token Ref="stringLiteral" />
+          <Token Ref="floatingPointNumber" />
+          <Token Ref="NULL" />
+          <Token Ref="TRUE" />
+          <Token Ref="FALSE" />
+        </Choice>
+    </Parser>
+    <Parser Name="member">
+        <Sequence Description="A JSON member&apos;s structure">
+          <Token Ref="stringLiteral" />
+          <Token Ref="COLON" />
+          <Reference Ref="Value" />
+        </Sequence>
+    </Parser>
+    <Parser Name="arr">
+        <Sequence Description="A JSON array&apos;s structure ">
+          <Token Ref="LBKT" />
+          <RepSep Mult="*">
+            <Reference Ref="Value" />
+            <Token Ref="COMMA" />
+          </RepSep>
+          <Token Ref="RBKT" />
+        </Sequence>
+    </Parser>
+    <Parser Name="obj">
+        <Sequence Description="A JSON object&apos;s structure">
+          <Token Ref="LCURLY" />
+          <RepSep Mult="*">
+            <Reference Ref="member" />
+            <Token Ref="COMMA" />
+          </RepSep>
+          <Token Ref="RCURLY" />
+        </Sequence>
+    </Parser>
+  </Parsers>
+</VLL-Grammar>
+}
+
Index: trunk/VLLS/src/vll/gui/samples/P2SEArithExprAction.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/P2SEArithExprAction.scala    (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/P2SEArithExprAction.scala    (revision 236)
@@ -0,0 +1,116 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.{Dialog, Label, Swing}
+import scala.concurrent.ops
+import vll.gui.VllGui
+
+class P2SEArithExprAction(val gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example augments the parser described at page 760 of 
+"Programming in Scala, Second Edition" 
(http://www.artima.com/shop/programming_in_scala_2ed
+with action-code that actually evaluates the expression.
+A description of the same parser can also be found here:
+http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
+
+IMPORTANT: Remember to have the top-level parser (Expr) selected when running
+the parser.
+
+Sample input (remove quotes): "(2 + 3) * (7 - 3)"
+Output: 20
+
+</pre></body></html>"""
+    gui.parsers.reset()
+    ops.spawn {
+      gui.parsers.load(grammar)
+      val firstRule = gui.parsers.ruleBank.ruleNames(0)
+      Swing.onEDT {
+        gui.updateRuleChooser(firstRule)
+        gui.ruleTreePanel.setRule(firstRule)
+      }
+    }
+    gui.title = "VisualLangLab/S - P2SE-ArithExprAction"
+//    gui.logTextPane.clearLogText()
+    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
+        "VisualLangLab sample - P2SE-ArithExprAction", Dialog.Message.Info, 
null)
+  }
+
+  val grammar = <VLL-Grammar>
+  <Whitespace>\\s+</Whitespace>
+  <Comments></Comments>
+  <Tokens>
+    <Literal Name="RPAREN" Pattern=")"/>
+    <Regex Name="floatingPointNumber" 
Pattern="(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
+    <Literal Name="MULT" Pattern="*"/>
+    <Literal Name="LPAREN" Pattern="("/>
+    <Literal Name="MINUS" Pattern="-"/>
+    <Literal Name="DIV" Pattern="/"/>
+    <Literal Name="PLUS" Pattern="+"/>
+  </Tokens>
+  <Parsers>
+    <Parser Name="Expr">
+        <Sequence ActionText="function (arg) {&#xA;  if (!arg) {&#xA;    
return;&#xA;  }&#xA;  var expr = arg[0];&#xA;  var list = arg[1];&#xA;  for 
(var i = 0; i &lt; list.length; ++i) {&#xA;    var pair = list[i];&#xA;    
switch (pair[0]) {&#xA;    case 0:&#xA;      expr += pair[1]; break;&#xA;    
case 1:&#xA;      expr -= pair[1]; break;&#xA;    }&#xA;  }&#xA;  return 
expr;&#xA;}" Description="The &apos;expr&apos; parser-rule&apos;s structure">
+          <Reference Ref="term" />
+          <Choice Mult="*" Description="PLUS or MINUS">
+            <Sequence >
+              <Token Ref="PLUS" Drop="true"/>
+              <Reference Ref="term" />
+            </Sequence>
+            <Sequence >
+              <Token Ref="MINUS" Drop="true"/>
+              <Reference Ref="term" />
+            </Sequence>
+          </Choice>
+        </Sequence>
+    </Parser>
+    <Parser Name="factor">
+        <Choice ActionText="function (arg) {&#xA;  if (!arg) {&#xA;    
return;&#xA;  }&#xA;  switch (arg[0]) {&#xA;  case 0:&#xA;    return 
parseFloat(arg[1]); break;&#xA;  case 1: &#xA;    return arg[1]; break;&#xA;  
} &#xA;}" Description="The &apos;factor&apos; parser-rule&apos;s structure">
+          <Token Ref="floatingPointNumber" />
+          <Sequence >
+            <Token Ref="LPAREN" Drop="true"/>
+            <Reference Ref="Expr" />
+            <Token Ref="RPAREN" Drop="true"/>
+          </Sequence>
+        </Choice>
+    </Parser>
+    <Parser Name="term">
+        <Sequence ActionText="(a: Any) =&gt; a match {&#xA;  case null =&gt; 
null&#xA;  case Array(f: Double, lst:List[_]) =&gt; &#xA;    var res = f&#xA; 
   lst.foreach(_ match {&#xA;      case Pair(0, f2:Double) =&gt; res *= 
f2&#xA;      case Pair(1, f2:Double) =&gt; res /= f2&#xA;    })&#xA;    
res&#xA;}" Description="The &apos;term&apos; parser-rule&apos;s structure">
+          <Reference Ref="factor" />
+          <Choice Mult="*" Description="MULT or DIV">
+            <Sequence >
+              <Token Ref="MULT" Drop="true"/>
+              <Reference Ref="factor" />
+            </Sequence>
+            <Sequence >
+              <Token Ref="DIV" Drop="true"/>
+              <Reference Ref="factor" />
+            </Sequence>
+          </Choice>
+        </Sequence>
+    </Parser>
+  </Parsers>
+</VLL-Grammar>
+
+}
+
Index: trunk/VLLS/src/vll/gui/samples/PS2EArithExpr.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/PS2EArithExpr.scala  (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/PS2EArithExpr.scala  (revision 236)
@@ -0,0 +1,117 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.Dialog
+import scala.swing.Label
+import vll.gui.VllGui
+
+class PS2EArithExpr(val gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example is based on the parser described at page 760 of 
+"Programming in Scala" (http://www.artima.com/shop/programming_in_scala_2ed)
+A description of the same parser can also be found here:
+http://lamp.epfl.ch/teaching/foundations_of_software/docs/combinator_parsing.pdf
+
+Another version of this parser with action-code that evaluages the 
+expression to a number is also packaged with VisualLangLab.
+
+IMPORTANT: Remember to have the top-level parser (Expr) selected when running
+the parser.
+
+Sample input (remove quotes): "(2 + 3) * (7 - 3)"
+Output: Array(Array(Pair(1, Array(Array(Pair(0, 2), List()), 
+    List(Pair(0, Array(Pair(0, 3), List()))))), List(Pair(0, 
+    Pair(1, Array(Array(Pair(0, 7), List()), List(Pair(1, 
+    Array(Pair(0, 3), List())))))))), List())
+
+</pre></body></html>"""
+    gui.parsers.reset()
+    gui.parsers.load(grammar)
+    val firstRule = gui.parsers.ruleBank.ruleNames(0)
+    gui.updateRuleChooser(firstRule)
+    gui.title = "VisualLangLab/S - PS2E-ArithExpr"
+    gui.ruleTreePanel.setRule(firstRule)
+//    gui.logTextPane.clearLogText()
+    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
+        "VisualLangLab sample - PS2E-ArithExpr", Dialog.Message.Info, null)
+  }
+
+  val grammar = <VLL-Grammar>
+  <Whitespace>\\s+</Whitespace>
+  <Comments></Comments>
+  <Tokens>
+    <Literal Name="RPAREN" Pattern=")"/>
+    <Regex Name="floatingPointNumber" 
Pattern="(\\d+(\\.\\d*)?|\\d*\\.\\d+)([eE][+-]?\\d+)?[fFdD]?"/>
+    <Literal Name="MULT" Pattern="*"/>
+    <Literal Name="LPAREN" Pattern="("/>
+    <Literal Name="MINUS" Pattern="-"/>
+    <Literal Name="DIV" Pattern="/"/>
+    <Literal Name="PLUS" Pattern="+"/>
+  </Tokens>
+  <Parsers>
+    <Parser Name="Expr">
+        <Sequence Description="The &apos;expr&apos; parser-rule&apos;s 
structure">
+          <Reference Ref="term" />
+          <Choice Mult="*" Description="PLUS or MINUS">
+            <Sequence >
+              <Token Ref="PLUS" Drop="true"/>
+              <Reference Ref="term" />
+            </Sequence>
+            <Sequence >
+              <Token Ref="MINUS" Drop="true"/>
+              <Reference Ref="term" />
+            </Sequence>
+          </Choice>
+        </Sequence>
+    </Parser>
+    <Parser Name="factor">
+        <Choice Description="The &apos;factor&apos; parser-rule&apos;s 
structure">
+          <Token Ref="floatingPointNumber" />
+          <Sequence >
+            <Token Ref="LPAREN" Drop="true"/>
+            <Reference Ref="Expr" />
+            <Token Ref="RPAREN" Drop="true"/>
+          </Sequence>
+        </Choice>
+    </Parser>
+    <Parser Name="term">
+        <Sequence Description="The &apos;term&apos; parser-rule&apos;s 
structure">
+          <Reference Ref="factor" />
+          <Choice Mult="*" Description="MULT or DIV">
+            <Sequence >
+              <Token Ref="MULT" Drop="true"/>
+              <Reference Ref="factor" />
+            </Sequence>
+            <Sequence >
+              <Token Ref="DIV" Drop="true"/>
+              <Reference Ref="factor" />
+            </Sequence>
+          </Choice>
+        </Sequence>
+    </Parser>
+  </Parsers>
+</VLL-Grammar>
+
+}
+
Index: trunk/VLLS/src/vll/gui/samples/TDARExprAST.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/TDARExprAST.scala    (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/TDARExprAST.scala    (revision 236)
@@ -0,0 +1,125 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.Dialog
+import scala.swing.Label
+import vll.gui.VllGui
+
+class TDARExprAST(gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example is based on the parser described in section 3.3 
+"<i>Evaluating Expressions Using an AST Intermediate Form</i>" 
+of the book "<i>The Definitive ANTLR Reference</i>" 
+(http://pragprog.com/book/tpantlr/the-definitive-antlr-reference)
+    
+You can find sample test input in the book.
+
+IMPORTANT: All test-input must end with an ENTER or RETURN 
+as the parser expects a NEWLINE token at the end.
+    
+Read more at http://vll.java.net/Examples.html
+    
+The top-level parser-rule has been renamed to "Prog" 
+(initial capital) so that it is presented first. 
+</pre></body></html>"""
+
+    gui.parsers.reset()
+    gui.parsers.load(grammar)
+    val firstRule = gui.parsers.ruleBank.ruleNames(0)
+    gui.updateRuleChooser(firstRule)
+    gui.title = "VisualLangLab/S - TDAR-AST"
+    gui.ruleTreePanel.setRule(firstRule)
+    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
+        "VisualLangLab sample - TDAR-AST", Dialog.Message.Info, null)
+  }
+
+  val grammar = <VLL-Grammar>
+  <Whitespace>[ \\t]+</Whitespace>
+  <Comments></Comments>
+  <Tokens>
+    <Literal Name="RPAREN" Pattern=")"/>
+    <Regex Name="INT" Pattern="\\d+"/>
+    <Literal Name="MULT" Pattern="*"/>
+    <Literal Name="LPAREN" Pattern="("/>
+    <Regex Name="NEWLINE" Pattern="\\r?\\n"/>
+    <Regex Name="ID" Pattern="[a-zA-Z]+"/>
+    <Literal Name="MINUS" Pattern="-"/>
+    <Literal Name="EQUALS" Pattern="="/>
+    <Literal Name="PLUS" Pattern="+"/>
+  </Tokens>
+  <Parsers>
+    <Parser Name="expr">
+        <Sequence >
+          <Reference Ref="multExpr" />
+          <Sequence Mult="*">
+            <Choice >
+              <Token Ref="PLUS" />
+              <Token Ref="MINUS" />
+            </Choice>
+            <Reference Ref="multExpr" />
+          </Sequence>
+        </Sequence>
+    </Parser>
+    <Parser Name="multExpr">
+        <Sequence >
+          <Reference Ref="atom" />
+          <Sequence Mult="*">
+            <Token Ref="MULT" Drop="true"/>
+            <Reference Ref="atom" />
+          </Sequence>
+        </Sequence>
+    </Parser>
+    <Parser Name="atom">
+        <Choice >
+          <Token Ref="INT" />
+          <Token Ref="ID" />
+          <Sequence >
+            <Token Ref="LPAREN" Drop="true"/>
+            <Reference Ref="expr" />
+            <Token Ref="RPAREN" Drop="true"/>
+          </Sequence>
+        </Choice>
+    </Parser>
+    <Parser Name="Prog">
+        <Reference Ref="stat" Mult="+"/>
+    </Parser>
+    <Parser Name="stat">
+        <Choice >
+          <Sequence >
+            <Token Ref="ID" />
+            <Token Ref="EQUALS" Drop="true"/>
+            <Reference Ref="expr" />
+            <Token Ref="NEWLINE" Drop="true"/>
+          </Sequence>
+          <Sequence >
+            <Reference Ref="expr" />
+            <Token Ref="NEWLINE" Drop="true"/>
+          </Sequence>
+          <Token Ref="NEWLINE" />
+        </Choice>
+    </Parser>
+  </Parsers>
+</VLL-Grammar>
+}
+
Index: trunk/VLLS/src/vll/gui/samples/TDARExpr.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/TDARExpr.scala       (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/TDARExpr.scala       (revision 236)
@@ -0,0 +1,125 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.Dialog
+import scala.swing.Label
+import vll.gui.VllGui
+
+class TDARExpr(gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example is based on the parser described in 
+section 3.1 "<i>Recognizing Language Syntax</i>" 
+of the book "<i>The Definitive ANTLR Reference</i>" 
+(http://pragprog.com/book/tpantlr/the-definitive-antlr-reference)
+    
+You can find sample test input in the book.
+
+IMPORTANT: All test-input must end with an ENTER or RETURN 
+as the parser expects a NEWLINE token at the end.
+
+Read more at http://vll.java.net/Examples.html
+    
+The top-level parser-rule has been renamed to "Prog" 
+(initial capital) so that it is presented first. 
+</pre></body></html>"""
+
+    gui.parsers.reset()
+    gui.parsers.load(grammar)
+    val firstRule = gui.parsers.ruleBank.ruleNames(0)
+    gui.updateRuleChooser(firstRule)
+    gui.title = "VisualLangLab/S - TDAR-Expr"
+    gui.ruleTreePanel.setRule(firstRule)
+    Dialog.showMessage(gui.contents(0), new Label(msg).peer,
+        "VisualLangLab sample - TDAR-Expr", Dialog.Message.Info, null)
+  }
+
+  val grammar = <VLL-Grammar>
+  <Whitespace>[ \\t]+</Whitespace>
+  <Comments></Comments>
+  <Tokens>
+    <Literal Name="RPAREN" Pattern=")"/>
+    <Regex Name="INT" Pattern="\\d+"/>
+    <Literal Name="MULT" Pattern="*"/>
+    <Literal Name="LPAREN" Pattern="("/>
+    <Regex Name="NEWLINE" Pattern="\\r?\\n"/>
+    <Regex Name="ID" Pattern="[a-zA-Z]+"/>
+    <Literal Name="MINUS" Pattern="-"/>
+    <Literal Name="EQUALS" Pattern="="/>
+    <Literal Name="PLUS" Pattern="+"/>
+  </Tokens>
+  <Parsers>
+    <Parser Name="expr">
+        <Sequence >
+          <Reference Ref="multExpr" />
+          <Sequence Mult="*">
+            <Choice >
+              <Token Ref="PLUS" />
+              <Token Ref="MINUS" />
+            </Choice>
+            <Reference Ref="multExpr" />
+          </Sequence>
+        </Sequence>
+    </Parser>
+    <Parser Name="multExpr">
+        <Sequence >
+          <Reference Ref="atom" />
+          <Sequence Mult="*">
+            <Token Ref="MULT" />
+            <Reference Ref="atom" />
+          </Sequence>
+        </Sequence>
+    </Parser>
+    <Parser Name="atom">
+        <Choice >
+          <Token Ref="INT" />
+          <Token Ref="ID" />
+          <Sequence >
+            <Token Ref="LPAREN" />
+            <Reference Ref="expr" />
+            <Token Ref="RPAREN" />
+          </Sequence>
+        </Choice>
+    </Parser>
+    <Parser Name="Prog">
+        <Reference Ref="stat" Mult="+"/>
+    </Parser>
+    <Parser Name="stat">
+        <Choice >
+          <Sequence >
+            <Token Ref="ID" />
+            <Token Ref="EQUALS" />
+            <Reference Ref="expr" />
+            <Token Ref="NEWLINE" />
+          </Sequence>
+          <Sequence >
+            <Reference Ref="expr" />
+            <Token Ref="NEWLINE" />
+          </Sequence>
+          <Token Ref="NEWLINE" />
+        </Choice>
+    </Parser>
+  </Parsers>
+</VLL-Grammar>
+}
+
Index: trunk/VLLS/src/vll/gui/samples/TDARExprActions.scala
===================================================================
--- trunk/VLLS/src/vll/gui/samples/TDARExprActions.scala        (revision 0)
+++ trunk/VLLS/src/vll/gui/samples/TDARExprActions.scala        (revision 236)
@@ -0,0 +1,129 @@
+/*
+ Copyright 2010, Sanjay Dasgupta
+ sanjay.dasgupta@...
+
+ This file is part of VisualLangLab (http://vll.java.net/).
+
+ VisualLangLab is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ VisualLangLab is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with VisualLangLab.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package vll.gui.samples
+
+import scala.swing.Dialog
+import scala.swing.Label
+import vll.gui.VllGui
+
+class TDARExprActions(gui: VllGui) {
+
+  def load() {
+    val msg = """<html><body><pre>
+This example is based on the parser described in 
+section 3.2 "<i>Using Syntax to Drive Action Execution</i>" 
+of the book "<i>The Definitive ANTLR Reference</i>" 
+(http://pragprog.com/book/tpantlr/the-definitive-antlr-reference)
+
+Actions (written as JavaScript and Scala fun
[truncated due to length]



[vll~svn:236] Updates for VLL-52, VLL-53, and VLL-54.

sanjay_dasgupta 12/10/2011
 
 
Close
loading
Please Confirm
Close