# FormulaSyntaxTree

## Content

<div class="docapp-java-api-doc-main"><style>:not(h1, h2, h3, h4, h5, h6)>code,
:not(h1, h2, h3, h4, h5, h6)>tt {
    font-size: 14px;
    padding-top: 4px;
    margin-top: 8px;
    line-height: 1.4em;
}

.summary-table dt code {
    font-size: 14px;
    vertical-align: top;
    padding-top: 4px;
}

.tab {
    background-color: #0066FF;
    color: #ffffff;
    padding: 8px;
    width: 5em;
    font-weight: bold;
}

/*
 * Styles for page header and footer.
 */
.title {
    color: #2c4557;
    margin: 10px 0;
}

.sub-title {
    margin: 5px 0 0 0;
}

.header ul {
    margin: 0 0 15px 0;
    padding: 0;
}

.header ul li,
.footer ul li {
    list-style: none;
}

/*
 * Styles for headings.
 */
.summary h2,
.details h2,
h2,
.block-list h2 {
    padding: 0;
    margin: 15px 0;
}

.summary h3,
.details h3,
.summary .inherited-list h2 {
    background-color: var(--ds-product-color);
    color: #fff;
    border: 1px solid #d0d9e0;
    padding: 7px 5px;
}

.summary h3 a,
.details h3 a,
.summary .inherited-list h2 a {
    color: #fff !important;
}
/*
 * Styles for page layout containers.
 */
dl.notes>dt {
    font-size: 12px;
    font-weight: bold;
    margin: 10px 0 0 0;
    color: #4E4E4E;
}

dl.notes>dd {
    margin: 5px 10px 10px 0;
    font-size: 14px;
}

dl.name-value>dt {
    margin-left: 1px;
    font-size: 1.1em;
    display: inline;
    font-weight: bold;
}

dl.name-value>dd {
    margin: 0 0 0 1px;
    font-size: 1.1em;
    display: inline;
}

/*
 * Styles for lists.
 */
li.circle {
    list-style: circle;
}

ul.horizontal li {
    display: inline;
    font-size: 0.9em;
}

div.inheritance {
    margin: 0;
    padding: 0;
}

div.inheritance div.inheritance {
    margin-left: 2em;
}

ul.block-list,
ul.details-list,
ul.member-list,
ul.summary-list {
    margin: 10px 0 10px 0;
    padding: 0;
}

ul.block-list>li,
ul.details-list>li,
ul.member-list>li,
ul.summary-list>li {
    list-style: none;
    margin-bottom: 15px;
    line-height: 1.4;
}

.summary-table dl,
.summary-table dl dt,
.summary-table dl dd {
    margin-top: 0;
    margin-bottom: 1px;
}

ul.see-list,
ul.see-list-long {
    padding-left: 0;
    list-style: none;
}

ul.see-list li {
    display: inline;
}

ul.see-list li:not(:last-child):after,
ul.see-list-long li:not(:last-child):after {
    content: ", ";
    white-space: pre-wrap;
}

/*
 * Styles for tables.
 */
.summary-table,
.details-table {
    width: 100%;
    border-spacing: 0;
    border-left: 1px solid #EEE;
    border-right: 1px solid #EEE;
    border-bottom: 1px solid #EEE;
    padding: 0;
}

.caption {
    position: relative;
    text-align: left;
    background-repeat: no-repeat;
    color: #253441;
    font-weight: bold;
    clear: none;
    overflow: hidden;
    padding: 0;
    padding-top: 10px;
    padding-left: 1px;
    margin: 0;
    white-space: pre;
}

.caption a:link,
.caption a:visited {
    color: #1f389c;
}

.caption a:hover,
.caption a:active {
    color: #FFFFFF;
}

.caption span {
    white-space: nowrap;
    padding-top: 5px;
    padding-left: 12px;
    padding-right: 12px;
    padding-bottom: 7px;
    display: inline-block;
    background-color: var(--ds-product-color);
    color: #fff;
    border: none;
}

div.table-tabs {
    padding: 10px 0 0 1px;
    margin: 0;
}

div.table-tabs>button {
    border: none;
    cursor: pointer;
    padding: 5px 12px 7px 12px;
    font-weight: bold;
    margin-right: 3px;
}

div.table-tabs>button.active-table-tab {
    background: var(--ds-product-color);
    color: #fff;
}

div.table-tabs>button.table-tab {
    background: var(--ds-product-color);
    color: #FFFFFF;
    border-bottom: 1px solid #eee;
}

.two-column-summary {
    display: grid;
    grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
}

.three-column-summary {
    display: grid;
    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto);
}

.four-column-summary {
    display: grid;
    grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto);
}

@media screen and (max-width: 600px) {
    .two-column-summary {
        display: grid;
        grid-template-columns: 1fr;
    }
}

@media screen and (max-width: 800px) {
    .three-column-summary {
        display: grid;
        grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
    }

    .three-column-summary .col-last {
        grid-column-end: span 2;
    }
}

@media screen and (max-width: 1000px) {
    .four-column-summary {
        display: grid;
        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
    }
}

.summary-table>div,
.details-table>div {
    text-align: left;
    padding: 8px 3px 3px 7px;
}

.col-first,
.col-second,
.col-last,
.col-constructor-name,
.col-summary-item-name {
    vertical-align: top;
    padding-right: 0;
    padding-top: 8px;
    padding-bottom: 3px;
}

.table-header {
    background: var(--ds-product-color);
    color: #fff;
    font-weight: bold;
}

.col-first,
.col-first {
    font-size: 13px;
}

.col-second,
.col-second,
.col-last,
.col-constructor-name,
.col-summary-item-name,
.col-last {
    font-size: 13px;
}

.col-first,
.col-second,
.col-constructor-name {
    vertical-align: top;
    overflow: auto;
}

.col-last {
    white-space: normal;
}

.col-first a:link,
.col-first a:visited,
.col-second a:link,
.col-second a:visited,
.col-first a:link,
.col-first a:visited,
.col-second a:link,
.col-second a:visited,
.col-constructor-name a:link,
.col-constructor-name a:visited,
.col-summary-item-name a:link,
.col-summary-item-name a:visited,
.constant-values-container a:link,
.constant-values-container a:visited,
.all-classes-container a:link,
.all-classes-container a:visited,
.all-packages-container a:link,
.all-packages-container a:visited {
    font-weight: bold;
}

.table-sub-heading-color {
    background-color: #EEEEFF;
}

.even-row-color,
.even-row-color .table-header {
    background-color: #FFFFFF;
}

.odd-row-color,
.odd-row-color .table-header {
    background-color: #EEEEEF;
}

/*
 * Styles for contents.
 */
.deprecated-content {
    margin: 0;
    padding: 10px 0;
}

div.block {
    font-size: 14px;
}

.col-last div {
    padding-top: 0;
}

.col-last a {
    padding-bottom: 3px;
}

.module-signature,
.package-signature,
.type-signature,
.member-signature {
    font-size: 14px;
    margin: 14px 0;
    white-space: pre-wrap;
}

.module-signature,
.package-signature,
.type-signature {
    margin-top: 0;
}

.member-signature .type-parameters-long,
.member-signature .parameters,
.member-signature .exceptions {
    display: inline-block;
    vertical-align: top;
    white-space: pre;
}

.member-signature .type-parameters {
    white-space: normal;
}

/*
 * Styles for formatting effect.
 */
.source-line-no {
    color: green;
    padding: 0 30px 0 0;
}

h1.hidden {
    visibility: hidden;
    overflow: hidden;
    font-size: 10px;
}

.block {
    display: block;
    margin: 0 10px 5px 0;
    color: #474747;
}

.deprecated-label,
.descfrm-type-label,
.implementation-label,
.member-name-label,
.member-name-link,
.module-label-in-package,
.module-label-in-type,
.override-specify-label,
.package-label-in-type,
.package-hierarchy-label,
.type-name-label,
.type-name-link,
.search-tag-link,
.preview-label {
    font-weight: bold;
}

.deprecation-block {
    font-size: 14px;
    border-style: solid;
    border-width: thin;
    border-radius: 10px;
    padding: 10px;
    margin-bottom: 10px;
    margin-right: 10px;
    display: inline-block;
}

.preview-block {
    font-size: 14px;
    border-style: solid;
    border-width: thin;
    border-radius: 10px;
    padding: 10px;
    margin-bottom: 10px;
    margin-right: 10px;
    display: inline-block;
}

/*
 * Styles for user-provided tables.
 *
 * borderless:
 *      No borders, vertical margins, styled caption.
 *      This style is provided for use with existing doc comments.
 *      In general, borderless tables should not be used for layout purposes.
 *
 * plain:
 *      Plain borders around table and cells, vertical margins, styled caption.
 *      Best for small tables or for complex tables for tables with cells that span
 *      rows and columns, when the "striped" style does not work well.
 *
 * striped:
 *      Borders around the table and vertical borders between cells, striped rows,
 *      vertical margins, styled caption.
 *      Best for tables that have a header row, and a body containing a series of simple rows.
 */

table.borderless,
table.plain,
table.striped {
    margin-top: 10px;
    margin-bottom: 10px;
}

table.borderless>caption,
table.plain>caption,
table.striped>caption {
    font-weight: bold;
    font-size: smaller;
}

table.borderless th,
table.borderless td,
table.plain th,
table.plain td,
table.striped th,
table.striped td {
    padding: 2px 5px;
}

table.borderless,
table.borderless>thead>tr>th,
table.borderless>tbody>tr>th,
table.borderless>tr>th,
table.borderless>thead>tr>td,
table.borderless>tbody>tr>td,
table.borderless>tr>td {
    border: none;
}

table.borderless>thead>tr,
table.borderless>tbody>tr,
table.borderless>tr {
    background-color: transparent;
}

table.plain {
    border-collapse: collapse;
    border: 1px solid black;
}

table.plain>thead>tr,
table.plain>tbody tr,
table.plain>tr {
    background-color: transparent;
}

table.plain>thead>tr>th,
table.plain>tbody>tr>th,
table.plain>tr>th,
table.plain>thead>tr>td,
table.plain>tbody>tr>td,
table.plain>tr>td {
    border: 1px solid black;
}

table.striped {
    border-collapse: collapse;
    border: 1px solid black;
}

table.striped>thead {
    background-color: #E3E3E3;
}

table.striped>thead>tr>th,
table.striped>thead>tr>td {
    border: 1px solid black;
}

table.striped>tbody>tr:nth-child(even) {
    background-color: #EEE
}

table.striped>tbody>tr:nth-child(odd) {
    background-color: #FFF
}

table.striped>tbody>tr>th,
table.striped>tbody>tr>td {
    border-left: 1px solid black;
    border-right: 1px solid black;
}

table.striped>tbody>tr>th {
    font-weight: normal;
}
</style><h1>Class FormulaSyntaxTree</h1>
<!-- ======== START OF CLASS DATA ======== -->

<div class="inheritance" title="Inheritance Tree"><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</a>
<div class="inheritance">com.grapecity.documents.excel.expressions.FormulaSyntaxTree</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">FormulaSyntaxTree</span>
<span class="extends-implements">extends <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a>
implements <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Cloneable.html" title="class or interface in java.lang">Cloneable</a></span></div>
<div class="block">Represents a formula as a syntax tree. <p>This class is the entry point for the formula expression API. A  <code>FormulaSyntaxTree</code> can be created as an empty tree and then populated by assigning a root  <a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions"><code>SyntaxNode</code></a>, or it can be created from formula  text by using  <a href="#Parse(java.lang.String)"><code>Parse(String)</code></a>. After the tree is built, you can  inspect its structure with  <a href="#getRoot()"><code>getRoot()</code></a> or convert it back to formula text with  <a href="#toString()"><code>toString()</code></a>.</p>
<pre><code data-language="Java">
 String formula = "LET(AppUpTime,NOW()-DATE(2020,4,17)+366, YEAR(AppUpTime)-1900-1 &amp; \" years\")";
 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse(formula);
 FunctionNode find = new FunctionNode("NOW");
 FunctionNode replacement = new FunctionNode("DATE");
 replacement.getChildren().add(new NumberNode(2021));
 replacement.getChildren().add(new NumberNode(2));
 replacement.getChildren().add(new NumberNode(14));

 java.util.Stack&lt;SyntaxNode&gt; nodes = new java.util.Stack&lt;SyntaxNode&gt;();
 nodes.push(syntaxTree.getRoot());
 while (!nodes.isEmpty()) {
     java.util.List&lt;SyntaxNode&gt; children = nodes.pop().getChildren();
     for (int i = 0; i &lt; children.size(); i++) {
         SyntaxNode child = children.get(i);
         if (child.equals(find)) {
             children.set(i, replacement);
         } else {
             nodes.push(child);
         }
     }
 }
 String formulaText = syntaxTree.toString();
 </code></pre></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a class="member-name-link" href="#%3Cinit%3E()">FormulaSyntaxTree</a>()</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div aria-orientation="horizontal" class="table-tabs" role="tablist"><button aria-controls="method-summary-table.tabpanel" aria-selected="true" class="active-table-tab" id="method-summary-table-tab0" onclick="show('method-summary-table', 'method-summary-table', 3)" onkeydown="switchTab(event)" role="tab" tabindex="0">All Methods</button><button aria-controls="method-summary-table.tabpanel" aria-selected="false" class="table-tab" id="method-summary-table-tab1" onclick="show('method-summary-table', 'method-summary-table-tab1', 3)" onkeydown="switchTab(event)" role="tab" tabindex="-1">Static Methods</button><button aria-controls="method-summary-table.tabpanel" aria-selected="false" class="table-tab" id="method-summary-table-tab2" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" onkeydown="switchTab(event)" role="tab" tabindex="-1">Instance Methods</button><button aria-controls="method-summary-table.tabpanel" aria-selected="false" class="table-tab" id="method-summary-table-tab4" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" onkeydown="switchTab(event)" role="tab" tabindex="-1">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div aria-labelledby="method-summary-table-tab0" class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#clone()">clone</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates a copy of the  <code>FormulaSyntaxTree</code> instance.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#equals(java.lang.Object)">equals</a><wbr>(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a>&nbsp;obj)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Indicates whether this formula syntax tree is equal to the specified object.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions">SyntaxNode</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#getRoot()">getRoot</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Gets the root element of the syntax tree for this formula.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#hashCode()">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the hash code for this  <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a> instance.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a class="member-name-link" href="#Parse(java.lang.String)">Parse</a><wbr>(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a>&nbsp;text)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Creates a new  <code>FormulaSyntaxTree</code> from a formula string.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a class="member-name-link" href="#Parse(java.lang.String,com.grapecity.documents.excel.expressions.ParseContext)">Parse</a><wbr>(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a>&nbsp;text,
 <a href="ParseContext.html" title="class in com.grapecity.documents.excel.expressions">ParseContext</a>&nbsp;context)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Parses formula text into a  <code>FormulaSyntaxTree</code> by using the specified <a href="ParseContext.html" title="class in com.grapecity.documents.excel.expressions"><code>ParseContext</code></a>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#setRoot(com.grapecity.documents.excel.expressions.SyntaxNode)">setRoot</a><wbr>(<a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions">SyntaxNode</a>&nbsp;value)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Sets the root node of the formula syntax tree.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#toString()">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the formula text represented by this syntax tree.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>final <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a class="member-name-link" href="#toString(com.grapecity.documents.excel.expressions.UnParseContext)">toString</a><wbr>(<a href="UnParseContext.html" title="class in com.grapecity.documents.excel.expressions">UnParseContext</a>&nbsp;context)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the formula text represented by this syntax tree, optionally using the specified unparse context.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a></h3>
<code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</a>, <a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="<init>()">
<h3>FormulaSyntaxTree</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">FormulaSyntaxTree</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getRoot()">
<h3>getRoot</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions">SyntaxNode</a></span>&nbsp;<span class="element-name">getRoot</span>()</div>
<div class="block">Gets the root element of the syntax tree for this formula.
 <pre><code data-language="Java">
 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse("SUM(A1:A3)+B1");
 SyntaxNode root = syntaxTree.getRoot();
 String formulaText = root.toString();
 </code></pre></div>
<dl class="notes">
<dt>Returns:</dt>
<dd>The root <code>SyntaxNode</code> of the formula syntax tree.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="setRoot(com.grapecity.documents.excel.expressions.SyntaxNode)">
<h3>setRoot</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">setRoot</span><wbr><span class="parameters">(<a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions">SyntaxNode</a>&nbsp;value)</span></div>
<div class="block">Sets the root node of the formula syntax tree. <p>Use this method to replace the current formula expression with a different  <a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions"><code>SyntaxNode</code></a>. Passing  <code>null</code> clears the current root node.</p>
<pre><code data-language="Java">
 String formula = "SUM(A1:A3)+B1";
 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse(formula);
 SyntaxNode root = SyntaxNode.Parse("A1*A2");
 syntaxTree.setRoot(root);
 </code></pre></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>value</code> - The root <a href="SyntaxNode.html" title="class in com.grapecity.documents.excel.expressions"><code>SyntaxNode</code></a> to assign to the syntax tree, or <code>null</code> to clear the current root node.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="Parse(java.lang.String)">
<h3>Parse</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></span>&nbsp;<span class="element-name">Parse</span><wbr><span class="parameters">(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a>&nbsp;text)</span></div>
<div class="block">Creates a new  <code>FormulaSyntaxTree</code> from a formula string.<p>The specified text should contain only the formula expression. It should not  start with  <code>=</code> and should not be surrounded with  {= }}. If <code>text</code> is <code>null</code> or empty, this method returns an empty <code>FormulaSyntaxTree</code>.</p> <p>Use  <a href="#Parse(java.lang.String,com.grapecity.documents.excel.expressions.ParseContext)"><code>Parse(String,ParseContext)</code></a> when the formula needs parsing options such as base row, base column, or R1C1 reference style.</p>
<pre><code data-language="Java">
 String formula = "SUM(A1:A3)+B1";
 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse(formula);
 SyntaxNode root = syntaxTree.getRoot();
 </code></pre></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>text</code> - The formula text to parse. This value can be <code>null</code> or empty.</dd>
<dt>Returns:</dt>
<dd>A <code>FormulaSyntaxTree</code> populated from the specified formula text, or an empty  <code>FormulaSyntaxTree</code> if <code>text</code> is <code>null</code> or empty.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="Parse(java.lang.String,com.grapecity.documents.excel.expressions.ParseContext)">
<h3>Parse</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></span>&nbsp;<span class="element-name">Parse</span><wbr><span class="parameters">(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a>&nbsp;text,
 <a href="ParseContext.html" title="class in com.grapecity.documents.excel.expressions">ParseContext</a>&nbsp;context)</span></div>
<div class="block">Parses formula text into a  <code>FormulaSyntaxTree</code> by using the specified <a href="ParseContext.html" title="class in com.grapecity.documents.excel.expressions"><code>ParseContext</code></a>. <p>Use the parse context to control how references in the formula text are interpreted,  including the zero-based base row, zero-based base column, and whether the formula uses  R1C1 reference style.</p> <p>If  <code>text</code> is <code>null</code> or empty, this method returns an empty <code>FormulaSyntaxTree</code> whose root node is <code>null</code>.</p>
<pre><code data-language="Java">
 ParseContext context = new ParseContext();
 context.setBaseRow(1);
 context.setBaseColumn(4);
 context.setIsR1C1(true);

 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse("R1C:R3C[1]", context);
 SyntaxNode root = syntaxTree.getRoot();
 </code></pre></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>text</code> - The formula text to parse. If <code>text</code> is <code>null</code> or empty, an empty <code>FormulaSyntaxTree</code> is returned.</dd>
<dd><code>context</code> - The parse context that specifies the base row, base column, and reference style used to interpret the formula text.</dd>
<dt>Returns:</dt>
<dd>A <code>FormulaSyntaxTree</code> created from the specified formula text. Returns an empty <code>FormulaSyntaxTree</code> if <code>text</code> is <code>null</code> or empty.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Returns the formula text represented by this syntax tree. <p>This method returns the same result as calling  <a href="#toString(com.grapecity.documents.excel.expressions.UnParseContext)"><code>toString(UnParseContext)</code></a> with the default unparse context. If this syntax tree has no root node, an empty string is returned.</p>
<pre><code data-language="Java">
 String formula = "SUM(A1:A3)+B1";
 FormulaSyntaxTree syntaxTree = FormulaSyntaxTree.Parse(formula);
 String formulaText = syntaxTree.toString();
 </code></pre></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a></code></dd>
<dt>Returns:</dt>
<dd>A <code>String</code> containing the formula text, or an empty string if this syntax tree has no root node.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString(com.grapecity.documents.excel.expressions.UnParseContext)">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang">String</a></span>&nbsp;<span class="element-name">toString</span><wbr><span class="parameters">(<a href="UnParseContext.html" title="class in com.grapecity.documents.excel.expressions">UnParseContext</a>&nbsp;context)</span></div>
<div class="block">Returns the formula text represented by this syntax tree, optionally using the specified unparse context. <p>Use  <a href="UnParseContext.html" title="class in com.grapecity.documents.excel.expressions"><code>UnParseContext</code></a> to control how references are converted when the formula text is generated, such as the base row, base column, and reference style.</p>
<pre><code data-language="Java">
 ParseContext parseContext = new ParseContext();
 parseContext.setIsR1C1(true);
 FormulaSyntaxTree tree = FormulaSyntaxTree.Parse("R1C:R2C[1]", parseContext);
 UnParseContext unparseContext = new UnParseContext();
 unparseContext.setBaseRow(0);
 unparseContext.setBaseColumn(2);
 String formulaText = tree.toString(unparseContext);
 </code></pre></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>context</code> - The context that specifies how the syntax tree is converted to formula text, or  <code>null</code> to omit conversion options.</dd>
<dt>Returns:</dt>
<dd>The formula text generated from this syntax tree. Returns an empty string if this syntax tree has no root node.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="clone()">
<h3>clone</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions">FormulaSyntaxTree</a></span>&nbsp;<span class="element-name">clone</span>()</div>
<div class="block">Creates a copy of the  <code>FormulaSyntaxTree</code> instance.</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</a></code>&nbsp;in class&nbsp;<code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a></code></dd>
<dt>Returns:</dt>
<dd>A copy of the <code>FormulaSyntaxTree</code> instance.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">equals</span><wbr><span class="parameters">(<a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a>&nbsp;obj)</span></div>
<div class="block">Indicates whether this formula syntax tree is equal to the specified object. <p>Two  <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a> instances are considered equal when the specified object is also a  <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a> and their root syntax nodes are equal. This method returns  <code>false</code> if <code>obj</code> is <code>null</code> or is not a <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a>.</p></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a></code></dd>
<dt>Parameters:</dt>
<dd><code>obj</code> - The object to compare with this formula syntax tree. May be <code>null</code>.</dd>
<dt>Returns:</dt>
<dd><code>true</code> if <code>obj</code> is a <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a> with an equal root syntax node; otherwise, <code>false</code>.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name">hashCode</span>()</div>
<div class="block">Returns the hash code for this  <a href="FormulaSyntaxTree.html" title="class in com.grapecity.documents.excel.expressions"><code>FormulaSyntaxTree</code></a> instance.<p>This method is not intended to provide a content-based hash code for the syntax tree.  Because the tree is mutable, the returned value is based on the runtime type rather than  the current formula structure.</p></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a class="external-link" href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang">Object</a></code></dd>
<dt>Returns:</dt>
<dd>The hash code of the current <code>FormulaSyntaxTree</code> type.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
<script>var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";

function show(tableId, selected, columns) {
    if (tableId !== selected) {
        document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')')
            .forEach(function (elem) {
                elem.style.display = 'none';
            });
    }
    document.querySelectorAll('div.' + selected)
        .forEach(function (elem, index) {
            elem.style.display = '';
            var isEvenRow = index % (columns * 2) < columns;
            elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor);
            elem.classList.add(isEvenRow ? evenRowColor : oddRowColor);
        });
    updateTabs(tableId, selected);
}

function updateTabs(tableId, selected) {
    document.querySelector('div#' + tableId + ' .summary-table')
        .setAttribute('aria-labelledby', selected);
    document.querySelectorAll('button[id^="' + tableId + '"]')
        .forEach(function (tab, index) {
            if (selected === tab.id || (tableId === selected && index === 0)) {
                tab.className = activeTableTab;
                tab.setAttribute('aria-selected', true);
                tab.setAttribute('tabindex', 0);
            } else {
                tab.className = tableTab;
                tab.setAttribute('aria-selected', false);
                tab.setAttribute('tabindex', -1);
            }
        });
}

function switchTab(e) {
    var selected = document.querySelector('[aria-selected=true]');
    if (selected) {
        if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) {
            // left or up arrow key pressed: move focus to previous tab
            selected.previousSibling.click();
            selected.previousSibling.focus();
            e.preventDefault();
        } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) {
            // right or down arrow key pressed: move focus to next tab
            selected.nextSibling.click();
            selected.nextSibling.focus();
            e.preventDefault();
        }
    }
}
</script></div>