8000 Added an article about ExpressionLanguage AST · symfony/symfony-docs@a91a590 · GitHub
[go: up one dir, main page]

Skip to content

Commit a91a590

Browse files
javiereguiluzxabbuh
authored andcommitted
Added an article about ExpressionLanguage AST
1 parent af876eb commit a91a590

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

components/expression_language.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ Caching
112112
The component provides some different caching strategies, read more about them
113113
in :doc:`/components/expression_language/caching`.
114114

115+
AST Dumping and Editing
116+
-----------------------
117+
118+
The AST (*Abstract Syntax Tree*) of expressions can be dumped and manipulated
119+
as explained in :doc:`/components/expression_language/ast`.
120+
115121
Learn More
116122
----------
117123

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
.. index::
2+
single: AST; ExpressionLanguage
3+
single: AST; Abstract Syntax Tree
4+
5+
Dumping and Manipulating the AST of Expressions
6+
===============================================
7+
8+
Manipulating or inspecting the expressions created with the ExpressionLanguage
9+
component is difficult because they are plain strings. A better approach is to
10+
turn those expressions into an AST. In computer science, `AST`_ (*Abstract
11+
Syntax Tree*) is *"a tree representation of the structure of source code written
12+
in a programming language"*. In Symfony, a ExpressionLanguage AST is a set of
13+
nodes that contain PHP classes representing the given expression.
14+
15+
Dumping the AST
16+
---------------
17+
18+
Call the :method:`Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage::getNodes`
19+
method after parsing any expression to get its AST::
20+
21+
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
22+
23+
$ast = (new ExpressionLanguage())
24+
->parse('1 + 2')
25+
->getNodes()
26+
;
27+
28+
// dump the AST nodes for inspection
29+
var_dump($ast);
30+
31+
// dump the AST nodes as a string representation
32+
$astAsString = $ast->dump();
33+
34+
Manipulating the AST
35+
--------------------
36+
37+
The nodes of the AST can also be dumped into a PHP array of nodes to allow
38+
manipulating them. Call the :method:`Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage::toArray`
39+
method to turn the AST into an array::
40+
41+
// ...
42+
43+
$astAsArray = (new ExpressionLanguage())
44+
->parse('1 + 2')
45+
->getNodes()
46+
->toArray()
47+
;
48+
49+
.. _`AST`: https://en.wikipedia.org/wiki/Abstract_syntax_tree

0 commit comments

Comments
 (0)
0