Les arbres de syntaxe abstraite (AST) représentent la structure récursive d'un document formel (code source du programme).

Plus à propos abstract-syntax-tree...

J'utilise transform fonction de l'API de compilateur dactylographié pour changer de code. Cette fonction est récursive et visitez chaque noeud. Quand j'ai trouvé un StringLiteral de foo je veux ajouter foo pour importer où my-lib comme ceci: import { foo } from 'my-lib'; Le code peut déjà importer ....
27 mai 2021 à 16:48
Lorsque j'ai lu sur les codes source d'Eclipse, j'ai trouvé un fichier nommé "$ classname $ .java". Une partie de son contenu est la suivante: package $packageName$; % if viewType =="treeViewer" import java.util.ArrayList; % endif import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.pa....
27 mai 2021 à 12:43
Je veux ajouter bar: true à x objet à l'aide de TypeScript AST. Ces céréales de code le bar: true: factory.createPropertyAssignment( factory.createIdentifier("bar"), factory.createTrue() ); Je sais que je dois retourner cette fonction afin de l'ajouter à ast. Si je le fais alors, le problèm....
25 mai 2021 à 20:44
J'essaie de créer une impression ast et jolie imprimée. Je pars des parties du langage C. Cependant, quand je dois représenter une déclaration vide, qui est {} Je suis complètement coincé, car je ne suis pas capable de créer simplement une nouvelle donnée qui contient quelque chose comme ça. Ou qua....
Contexte: J'essaie de mettre en œuvre l'algorithme d'unification (l'algorithme pour trouver l'unificateur le plus général de deux arbres de syntaxe abstraites). Étant donné qu'un unificateur est une substitution, l'algorithme nécessite la définition de la composition de substitutions. Pour être sp....
27 avril 2021 à 00:17
J'ai écrit un analyseur et un évaluateur pour un simple langage de programmation. Voici une version simplifiée des types pour l'AST: data Value = IntV Int | FloatV Float | BoolV Bool data Expr = IfE Value [Expr] | VarDefE String Value type Program = [Expr] Je veux que les messages d'erreur indiquen....
18 avril 2021 à 04:02
Je lis avec succès les classes TS en utilisant ts.createProgram et program.getSourceFile. Mais lorsque je lis le nœud de classe pour répertorier les propriétés, il ne compte pas les propriétés de la classe mère. Je peux obtenir le symbole et les noms des classes d'extension de node.heritageClauses.....
J'ai du mal à créer un algorithme, qui prend un tableau d'éléments frères (représentations abstraites de nœuds DOM) et renvoie ce tableau amélioré avec l'imbrication. La règle d'imbrication est assez simple: chaque titre commence une nouvelle section, qui s'étend jusqu'à l'en-tête suivant du même n....
J'utilise go / analysis pour créer mon propre outil d'analyse statique. Je ne sais toujours pas comment trouver les informations de def d'ast.Ident. Voici mes données de test package randomcheck func xxx() { } func demo() { xxx() } Et mon propre analyseur import ( "fmt" "go/ast" ....
J'utilise lark pour analyser du texte et j'avais besoin d'un moyen de faire correspondre un NAME qui ne contenait pas certains mots clés. J'ai les mots-clés répertoriés dans un terminal. Je ne sais tout simplement pas comment utiliser le terminal dont j'ai besoin. Voici comment j'ai formaté mes mot....
5 mars 2021 à 21:57
Quelle est la grammaire correcte pour une expression de membre standard? Par exemple. l'ast du code: test.test.function () serait MemberExpression ("test", MemberExpression ("test", MethodCall (.......
J'ai un gros projet et un grand nombre de fonctions membres de classe C ++ de la forme: Return CClass::MemberFunction( Arg1 arg1, //... std::weak_ptr<IMemberFunctionListenerInterface> listener) { //... } J'essaie d'écrire un matcher qui trouve des fonctions comme celles-ci, qui ont des arg....
J'essaye de remplacer les noms dans un fichier python. Pour cela, j'ai écrit une classe qui reconnaît et remplace les noms. Tout fonctionne bien. Cependant, les noms de fonction des modules importés sont également .......
27 févr. 2021 à 22:49
J'essaie d'analyser les fichiers c en utilisant pycparser et de trouver l'instruction switch J'ai généré l'ast en utilisant https://github.com/eliben/ pycparser / blob / master / examples / explore_ast.py ce lien. puis en utilisant n = len (ast.ext) j'ai trouvé la longueur des exts générés à part....
15 févr. 2021 à 11:26
J'essaie d'implémenter des opérateurs d'incrémentation dans mon analyseur. Cependant, je ne sais pas si un opérateur d'incrémentation doit être traité comme une instruction ou une expression. Il est logique de l'implémenter en tant qu'instruction car on peut l'utiliser comme instruction autonome t....
J'ai cet exemple de code python simple qui analyse un code python et extrait les variables qui y sont assignées: import ast import sys import astunparse import json tree=ast.parse('''\ a = 10 b,c=5,6 [d,e]=7,8 (f,g)=9,10 h=20 ''',mode="exec") for thing in tree.body: if isinstance(thing, ast.As....
J'essaie d'extraire toutes les variables de mon code qui n'ont pas d'indentation, voici un exemple simple: import ast import astunparse class AnalysisNodeVisitor(ast.NodeVisitor): def __init__(self, nodename): super().__init__() self.nodename=nodename self.setVariables=....
J'ai lu un tas de questions existantes ici sur StackOverflow, mais je n'arrive pas à comprendre ma grammaire. statement "Statement" = assignment / primitive / reference / operation operation "Operation" = statement operator:operator statement operator "Operator" = "+" * Notez que je pou....
J'ai une question. J'essaye de créer un arbre. Le code complet est volumineux, il m'est donc difficile de le saisir ici. Donc, un résumé de celui-ci est donné ci-dessous. struct sample *fn_02(void); struct sample *fn_03(void); // Main Function int main(void) { struct sample *tree; tree ....
J'essaie de créer un script pour extraire des morceaux du code erlang des fichiers source, mais mes approches ne fonctionnent pas. Voici ce que j'ai essayé: {ok, Forms} = epp:parse_file("src/day_tasks.erl", [{includes, "include"}]), file:write_file("/projects/result.txt", io_lib:format("~p", [Form....
22 janv. 2021 à 23:40
J'essaie d'implémenter des boucles for dans mon interpréteur, et j'essaie maintenant d'implémenter les instructions à un jeton continue et break dans l'analyseur. Compte tenu de mon lexer, Lexer "break" -> TOKEN::TBREAK "continue" -> TOKEN::TCONTINUE J'envisage deux façons de les implémenter via l'....
J'ai donc eu quelques scripts non vérifiés qui sont générés dynamiquement et doivent être exécutés. J'ai donc dû limiter l'accès à un module qui dans mon cas est io, os, shutil, etc ... Maintenant c'est quelque chose que j'ai essayé from types import ModuleType def generate_empty_globals(): re....
J'ai écrit une bibliothèque qui fonctionne au niveau ast. Parfois, la sortie générée dépasse la limite de longueur de ligne de linter. "foo_bar_can_haz_foo_bar_can_haz_foo_bar_can_haz_foo_bar_can_haz_foo_bar_can_haz_foo_bar_can_haz" Comment générer ce type de code à la place? "foo_bar_can_haz_foo_....
20 janv. 2021 à 02:02
Je suis tombé sur cette erreur def test_rec (): import ast exec (compile (ast.fix_missing_locations (ast.parse ("" "def fact (n): return 1 if n == 0 else n * fact (n - 1) print (fait (5)) .......
17 janv. 2021 à 23:00
J'utilise actuellement syn en suivant un exemple pour créer un AST qui peut être muté. Je comprends que je peux modifier le nœud que je parcours (comme indiqué ci-dessous dans mon code actuel) mais je suis curieux de savoir si je peux .......
17 janv. 2021 à 22:30