Вывод синтаксического дерева кода
Синтаксическое дерево - внутренняя структура, которую интерпретатор javascript создает из исходного кода.
Обычно синтаксическое дерево создается для выполнения, но также может использоваться и для оптимизации, чем, собственно, и занимается google closure compiler.
Как правило, синтаксическое дерево может вам понадобиться, если вы захотите разобраться в каких-то оптимизациях, либо пишете расширение к компилятору. Такое расширение получает синтаксическое дерево, и поэтому может делать с кодом все, что угодно.
Так как синтаксическое дерево заточено под выполнение, то оно содержит все значимые элементы - без лишних пробелов, комментариев и т.п.
Поэтому чтение файла в синтаксическое дерево, а потом генерация кода по этому дереву - само по себе является оптимизацией. Это соответствует значению флага --compilation_level , равному WHITESPACE_ONLY .
Простейший способ получить синтаксическое дерево - это использовать флаг --print_tree .
Например, для скрипта ast.js :
function Animal(speed) {
/** @type {number} */
this.speed = speed
}
Печать дерева:
java -jar compiler.jar --js ast.js --use_only_custom_externs --print_tree
Флаг --use_only_custom_externs при печати дерева необходим, иначе дерево будет также содержать все стандартные экстерны.
Результат:
BLOCK [synthetic: 1]
BLOCK [synthetic: 1]
SCRIPT [source name: null] [encoded source length: 0] [base line: -1] [end line: -1] 1 [sourcename: /dev/null] [synthetic: 1]
BLOCK [synthetic: 1]
SCRIPT [source name: null] [encoded source length: 0] [base line: -1] [end line: -1] 1 [sourcename: ast.js] [synthetic: 1]
FUNCTION Animal 1 [sourcename: ast.js]
NAME Animal 1
LP 1
NAME a 1
BLOCK 1
EXPR_RESULT 3
ASSIGN 3 [jsdoc_info: JSDocInfo]
GETPROP 3
THIS 3
STRING speed 3
NAME a 3
Как видите, выводится основная информация. Сверху - несколько служебных строк, а ниже - наша функция.
Аннотация /** @type {number} */ превратилась во внутреннюю структуру JSDocInfo .
Обратите внимание, дерево печатается для уже откомпилированного кода, со всеми оптимизациями и заменами. Поэтому, в частности, локальная переменная speed в дереве называется a .
Вы также можете получить дерево в более красивом виде, используя флаг --print_ast :
java -jar compiler.jar --js ast.js --use_only_custom_externs --print_ast >ast.dot
Полученный текст - граф в формате DOT, для просмотра которого обычно используется утилита graphviz, работающая под основными ОС.
Запустив эту утилиту и преобразовав в ней файл ast.dot , получим картинку:
Выглядит красивее, но в тестовом дереве --print_tree содержится больше информации, поэтому обычно удобнее использовать текстовый формат, а графический - больше для диаграмм. Вдруг кто-нибудь решит диплом или диссертацию написать по оптимизации javascript
|
Спасибо! Для диплома кое что у Вас тут забрал.
Как то, слабо описано... Но спасибо и за такое...
This is a great idea, it will definitely be shared widely, thanks for sharing it with us moto x3m
Oksana roksa
Roksa zabkowice
As in Wordle, there is a secret five-letter word that we have to try to guess while the absurdle game itself indicates the letters that we are getting right.
It looks so complicated. It took time for me to understand the nyt sudoku diagram.
Как-то неадекватно описано... Но и это я ценю...
There are deadly traps and intriguing riddles. You've come to the perfect location if you've always wanted to have a real adventure. In these incredible and addictive games, players assume the roles of fireboy and watergirl, two characters composed of distinct elements.
Typically, if you want to comprehend some optimizations or create a compiler extension, you may need a syntax tree. I'll check further info about this after working at roof repair hamilton company.
In this game, your goal is to fight and get as many points as possible to win over the opponent. In Basketball Random, there are two teams
I appreciate the effort you put into providing rankdle both sides of the argument.
The syntax tree is an essential internal structure used by the JavaScript interpreter to analyze and execute source code. It represents the build now gg code in a structured and optimized form, excluding unnecessary elements like spaces and comments.
When you need a break from the stresses of life, visit the entertaining gaming website free games
I enjoyed reading your post. It provides a great deal of useful information and is really detailed. Additionally, I desire to introduce you to elastic man, a genuinely astonishing amusement device. Anyway, I hope to see more of your contributions in the future.
Product animation is the process of creating dynamic visuals to showcase and highlight the features, functionality, and benefits of a product. Through animated elements such as 3D modeling, motion graphics, and visual effects, it engages viewers, enhances comprehension, and helps drive product awareness, sales, and marketing efforts.
Excellent stuff; I'll let my friends know about it and have them check it out. I appreciate you sharing! Whenever you have more time, go to: run 3
This is great work, and I will recommend it to my friends. I value hearing your perspective. If you find yourself with spare time, visit basketball stars
If you've been looking for a true adventure, you've come to the right place. A syntax tree may be required, for example snake io, if you want to understand some optimizations or make a compiler extension. removing extraneous parts like comments and whitespace.
I've introduced four in a row to my kids, and it's incredible to see how quickly they grasp the rules and start strategizing. It's a game that grows with you.
The efficiency and elegance of your pokedoku code implementation truly stand out, demonstrating your expertise in coding.
Понимания и информация, содержащиеся в нем, были невероятно поучительны и помогли мне гораздо глубже понять тему. Спасибо, iq test free, что поделились со мной своими знаниями и опытом.
I can't wait to attend this webinar, as it promises snaptik to provide valuable insights into the challenges faced by Ukrainian agriculture and society during the war. fnf
One of the most captivating aspects of kinitopet is its emphasis on community and collaboration. Players can join forces with friends and fellow adventurers to tackle challenges together, form alliances, and compete in thrilling multiplayer battles.
Play word games for free at waffle game. You will have comfortable moments with friends and family. Moments of relief after tiring work
They help improve memory Spotle retention and cognitive functions.
Visit the fun gaming website whenever you need a vacation from life's stresses. basketball stars
Retro Bowl's charm lies in its simplicity and addictive gameplay, reminiscent of classic football arcade games.
In , the main task is to serve customers by processing orders, selecting ingredients and decorating ice cream cups.
Playing a typical papa's games means making all the delectable fast food and bakery goods in the allotted time. The object of these games is to match the correct ingredients with the correct sequence. We prioritize prompt and accurate service!
The interface in Block Blast often has bright colors, fun sounds, easy to see, helping players have a comfortable experience.
In Snow Road game, players navigate their sleds through challenging terrains filled with obstacles.
thank you
The storyline in abgerny is captivating. I can’t help but wonder what will happen next, and the game’s mysteries make it impossible to put down.
To learn more information I played quite a few games. The one that stuck with me the most was Head Soccer.
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.