Je voudrais commencer avec Grako (3.6.6) et comme une première expérience avec les parseurs je voulais générer un tableau HTML à partir d'une syntaxe personnalisée. Le test de base suivantExemple de base Grako donne IndexError
import grako
grammar = """table = { row }+ ;
row = (cell1:cell "|" cell2:cell) "\n";
cell = /[a-z]+/ ;
"""
model = grako.genmodel("model", grammar)
ast = model.parse(
"""a | b
c | d
""", "table")
print(ast)
provoque une erreur
File "test.py", line 13, in <module>
""", "table")
File "grako\grammars.py", line 790, in grako.grammars.Grammar.parse (grako\grammars.c:27773)
File "grako\grammars.py", line 97, in grako.grammars.GrakoContext.parse (grako\grammars.c:4391)
File "grako\contexts.py", line 180, in grako.contexts.ParseContext.parse (grako\contexts.c:4313)
File "grako\grammars.py", line 594, in grako.grammars.Rule.parse (grako\grammars.c:22253)
File "grako\grammars.py", line 597, in grako.grammars.Rule._parse_rhs (grako\grammars.c:22435)
File "grako\contexts.py", line 399, in grako.contexts.ParseContext._call (grako\contexts.c:10088)
File "grako\contexts.py", line 433, in grako.contexts.ParseContext._invoke_rule (grako\contexts.c:11135)
File "grako\grammars.py", line 435, in grako.grammars.PositiveClosure.parse (grako\grammars.c:17285)
File "grako\contexts.py", line 695, in grako.contexts.ParseContext._positive_closure (grako\contexts.c:19286)
File "grako\contexts.py", line 696, in grako.contexts.ParseContext._positive_closure (grako\contexts.c:19240)
File "grako\grammars.py", line 435, in grako.grammars.PositiveClosure.parse.lambda10 (grako\grammars.c:17195)
File "grako\grammars.py", line 547, in grako.grammars.RuleRef.parse (grako\grammars.c:20774)
File "grako\grammars.py", line 594, in grako.grammars.Rule.parse (grako\grammars.c:22253)
File "grako\grammars.py", line 597, in grako.grammars.Rule._parse_rhs (grako\grammars.c:22435)
File "grako\contexts.py", line 399, in grako.contexts.ParseContext._call (grako\contexts.c:10088)
File "grako\contexts.py", line 433, in grako.contexts.ParseContext._invoke_rule (grako\contexts.c:11135)
File "grako\grammars.py", line 326, in grako.grammars.Sequence.parse (grako\grammars.c:11582)
File "grako\grammars.py", line 268, in grako.grammars.Token.parse (grako\grammars.c:9463)
File "grako\contexts.py", line 543, in grako.contexts.ParseContext._token (grako\contexts.c:13772)
File "grako\buffering.py", line 301, in grako.buffering.Buffer.match (grako\buffering.c:9168)
IndexError: string index out of range
qui se trouve être partial_match = (token[0].isalpha() and token.isalnum() and self.is_name_char(self.current()))
Malgré moi d'être de nouveau à parseurs et un petit manque de documentation, je voudrais rester à Grako.
Pouvez-vous m'aider à mettre en place un exemple de base qui génère le code HTML pour une table?
Oh, je vois. Merci! Pourriez-vous me montrer un exemple (avec une ligne de code) où l'AST est traduit en une sortie de chaîne (Renderer, non?)? J'ai parcouru les exemples liés, mais il est difficile d'extraire la partie pertinente sans avoir beaucoup d'expérience avec l'analyse syntaxique. – Gerenuk
Pour les traductions complexes, j'utilise '' grako.model''. Mais les ASTs produites par ** Grako ** sont faciles à utiliser de plusieurs façons différentes, alors je vous suggère de faire votre propre pour votre langage simple. Cela vous permettra d'apprendre ce que vous voulez comme support pour la traduction dans une bibliothèque, et ainsi vous permettre d'approcher '' grako.model'' plus facilement. – Apalala