<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to JBurg2 Syntax</title><link>https://sourceforge.net/p/jburg/wiki/JBurg2%2520Syntax/</link><description>Recent changes to JBurg2 Syntax</description><atom:link href="https://sourceforge.net/p/jburg/wiki/JBurg2%20Syntax/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 19 Nov 2014 12:40:38 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/jburg/wiki/JBurg2%20Syntax/feed" rel="self" type="application/rss+xml"/><item><title>JBurg2 Syntax modified by Tom Harwood</title><link>https://sourceforge.net/p/jburg/wiki/JBurg2%2520Syntax/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="jburg-reference"&gt;JBurg Reference&lt;/h1&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#jburg-reference"&gt;JBurg Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#invocation"&gt;Invocation&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#command-line-options"&gt;Command-line options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#building-with-apache-ant"&gt;Building with Apache Ant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburg-specification-elements"&gt;JBurg Specification Elements&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#directives"&gt;Directives&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#language"&gt;Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#package"&gt;package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#extends"&gt;extends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#implements"&gt;implements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#header"&gt;header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#inodetype"&gt;INodeType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburgnodetype"&gt;JBurg.NodeType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#inodeadapter"&gt;INodeAdapter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#opcodetype"&gt;OpcodeType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburgnonterminaltype"&gt;JBurg.NonterminalType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#defaulterrorhandler"&gt;DefaultErrorHandler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburgvolatilecostfunctions"&gt;JBurg.VolatileCostFunctions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburgconstant"&gt;JBurg.Constant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#ad-hoc-code"&gt;Ad-Hoc code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#jburginclude-directive"&gt;JBurg.include Directive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#macro-substitution"&gt;Macro Substitution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#rules"&gt;Rules&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#pattern-rules"&gt;Pattern Rules&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#pattern-match-subtree-with-children"&gt;Pattern Match: Subtree with Children&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#pattern-match-subtree-with-no-children-leaf"&gt;Pattern Match: Subtree with no Children (Leaf)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#pattern-match-subtree-with-variadic-children"&gt;Pattern Match: Subtree with Variadic Children&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#transformation-rules"&gt;Transformation Rules&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#simple-transformation-rule"&gt;Simple Transformation Rule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#general-transformation-rule"&gt;General Transformation Rule&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#reduction-actions"&gt;Reduction Actions&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#inline-reduction-action"&gt;Inline Reduction Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#reduction-action-specified-via-jburgreduction"&gt;Reduction Action Specified via JBurg.Reduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#reduction-action-with-a-prologue"&gt;Reduction Action with a Prologue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#cost-expressions"&gt;Cost Expressions&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#cost-as-an-integer-literal"&gt;Cost as an Integer Literal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cost-as-a-reference-to-a-jburgconstant-or-a-field"&gt;Cost as a reference to a JBurg.Constant or a field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cost-computed-via-function-call"&gt;Cost Computed via Function Call&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h1 id="invocation"&gt;Invocation&lt;/h1&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;jar&lt;/span&gt; &lt;span class="n"&gt;jburg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jar&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;specificationFile&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="command-line-options"&gt;Command-line options&lt;/h2&gt;
&lt;p&gt;Commonly used options&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-g&lt;/code&gt; : generate &lt;a class="" href="/p/jburg/wiki/Debugging"&gt;debugging code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-outputdir&lt;/code&gt; :  emit the BURM in the specified directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-inputdir&lt;/code&gt; : read the specification from the specified directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-outputfile&lt;/code&gt; : emit the BURM into the specified file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/CommandLineOptions"&gt;All command-line options&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="building-with-apache-ant"&gt;Building with Apache Ant&lt;/h2&gt;
&lt;p&gt;JBurg integrates well into &lt;code&gt;ant&lt;/code&gt; builds via a &lt;a class="" href="/p/jburg/wiki/antbuild"&gt;jburg macrodef&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="jburg-specification-elements"&gt;JBurg Specification Elements&lt;/h1&gt;
&lt;h2 id="directives"&gt;Directives&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/DirectivesGuide"&gt;Full guide&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="language"&gt;Language&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Language&lt;/span&gt; &lt;span class="n"&gt;Java&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="package"&gt;package&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;jburg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tutorial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="extends"&gt;extends&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;BaseBURM&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Optional&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="implements"&gt;implements&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;FrontEndTokenTypes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Deprecated.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="header"&gt;header&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Optional, no default.&lt;/span&gt;
&lt;span class="n"&gt;header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="inodetype"&gt;INodeType&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;INodeType&lt;/span&gt; &lt;span class="n"&gt;CommonTree&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Use ANTLR AST nodes as the i-node type&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="jburgnodetype"&gt;JBurg.NodeType&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NodeType&lt;/span&gt; &lt;span class="n"&gt;INT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;burmTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LiteralIntNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="inodeadapter"&gt;INodeAdapter&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;INodeAdapter&lt;/span&gt; &lt;span class="n"&gt;jburg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;burg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Antlr3JavaAdapter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="opcodetype"&gt;OpcodeType&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;OpcodeType&lt;/span&gt; &lt;span class="n"&gt;ASTNodeID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="jburgnonterminaltype"&gt;JBurg.NonterminalType&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NonterminalType&lt;/span&gt; &lt;span class="n"&gt;burmTest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NonterminalTypes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="defaulterrorhandler"&gt;DefaultErrorHandler&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;DefaultErrorHandler&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// p refers to the annotation object at&lt;/span&gt;
    &lt;span class="c1"&gt;// the root of the unreducible subtree.&lt;/span&gt;
    &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;UnknownTreeHandler&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;See the &lt;a class="" href="/p/jburg/wiki/Debugging"&gt;debugging&lt;/a&gt; section for details.&lt;/p&gt;
&lt;h3 id="jburgvolatilecostfunctions"&gt;JBurg.VolatileCostFunctions&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;VolatileCostFunctions&lt;/span&gt; &lt;span class="n"&gt;volatileCost1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;volatileCost2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="jburgconstant"&gt;JBurg.Constant&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Constant&lt;/span&gt; &lt;span class="n"&gt;ERROR_TRAP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;268435456&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="ad-hoc-code"&gt;Ad-Hoc code&lt;/h2&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Target and implementation specific code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="jburginclude-directive"&gt;&lt;code&gt;JBurg.include&lt;/code&gt; Directive&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/JBurgIncludeGuide"&gt;More information&lt;/a&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="s"&gt;"../arithmetic/IntegerArithmetic.jbg"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="macro-substitution"&gt;Macro Substitution&lt;/h2&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="s"&gt;"IntegerArithmetic.jbg"&lt;/span&gt; &lt;span class="n"&gt;SUBSTITUTE_ADD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"ADD"&lt;/span&gt; &lt;span class="n"&gt;SUBSTITUTE_INT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"INT(void)"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"#int#"&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"intValue()"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id="rules"&gt;Rules&lt;/h1&gt;
&lt;h2 id="pattern-rules"&gt;Pattern Rules&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/PatternRuleGuide"&gt;More information&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="pattern-match-subtree-with-children"&gt;Pattern Match: Subtree with Children&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;    nonterminal = NODE_TYPE(subtreeNonterminal subtreeName, subtreeNonterminalPrime subtreeNamePrime): cost&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="pattern-match-subtree-with-no-children-leaf"&gt;Pattern Match: Subtree with no Children (Leaf)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;    nonterminal = NODE_TYPE(void): cost&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="pattern-match-subtree-with-variadic-children"&gt;Pattern Match: Subtree with Variadic Children&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;    nonterminal = NODE_TYPE(subtreeNonterminal subtreeName*): cost
    {reduction action}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;    nonterminal = NODE_TYPE(subtreeNonterminal subtreeName+): cost&lt;br /&gt;
    {reduction action}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;    nonterminal = NODE_TYPE(subtreeNonterminal subtreeName subtreeVariadicNonterminal subtreeName*): cost&lt;br /&gt;
    {reduction action}&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2 id="transformation-rules"&gt;Transformation Rules&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/TransformationRuleGuide"&gt;More information&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="simple-transformation-rule"&gt;Simple Transformation Rule&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminalPrime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;originalNonterminal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="general-transformation-rule"&gt;General Transformation Rule&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminalPrime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;originalNonterminal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reduction&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="reduction-actions"&gt;Reduction Actions&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/ReductionActionsGuide"&gt;More information&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="inline-reduction-action"&gt;Inline Reduction Action&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminalName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NODE_TYPE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subtreeType&lt;/span&gt; &lt;span class="n"&gt;subtree&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;actionForNodeType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;nonterminalName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;subtree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="reduction-action-specified-via-jburgreduction"&gt;Reduction Action Specified via JBurg.Reduction&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;intExpression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ADD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intExpression&lt;/span&gt; &lt;span class="n"&gt;lhs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intExpression&lt;/span&gt; &lt;span class="n"&gt;rhs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;
&lt;span class="n"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Reduction&lt;/span&gt; &lt;span class="n"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;emitIntegerAdd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lhs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rhs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="reduction-action-with-a-prologue"&gt;Reduction Action with a Prologue&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;objExpression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;FUNCTION&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;functionHeader&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;functionBody&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cost&lt;/span&gt;
&lt;span class="nx"&gt;Prologue&lt;/span&gt; &lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setUpFunctionExpression&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;JBurg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Reduction&lt;/span&gt; &lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emitFunctionExpression&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="cost-expressions"&gt;Cost Expressions&lt;/h2&gt;
&lt;p&gt;&lt;a class="" href="/p/jburg/wiki/CostExpressionsGuide"&gt;More information&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="cost-as-an-integer-literal"&gt;Cost as an Integer Literal&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NODE_TYPE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;reduction&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="cost-as-a-reference-to-a-jburgconstant-or-a-field"&gt;Cost as a reference to a JBurg.Constant or a field&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NODE_TYPE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ManifestConstant&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;reduction&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="cost-computed-via-function-call"&gt;Cost Computed via Function Call&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;nonterminal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NODE_TYPE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;computedCost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getNode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;reduction&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tom Harwood</dc:creator><pubDate>Wed, 19 Nov 2014 12:40:38 -0000</pubDate><guid>https://sourceforge.net8509a02b5e3e52e0b24603cd751411807b53d69b</guid></item></channel></rss>