Pegjs: Prise en charge des faux caractères dactylographiés

Créé le 31 janv. 2018  ·  8Commentaires  ·  Source: pegjs/pegjs

Type de probleme

  • [x] Demande de fonctionnalité

Wut

Donc, je suis plutôt fan du plugin de dactylographie de @pjmolina de #514. Cependant, à la fin, il renvoie all .

J'espérais que tu m'aiderais à tricher. En fait, je veux juste écrire la signature dans parse/1 légèrement différemment, en ajoutant une sorte de chose à la syntaxe peg qui dit "faites-en le type de retour de parse/1 ", et aussi en marquant l'argument in :string s'il y a un type out. Ensuite, il vous suffirait de transtyper aveuglément la dernière valeur de retour, et le tour est joué.

Pour un utilisateur de typescript (ou flowtype), cela aurait un impact profond sur la vérifiabilité, même si c'est faux .

Combien de cappucinos dois-je vous envoyer pour que cela se produise, et à quelle adresse dois-je les envoyer

Commentaire le plus utile

Salut! En relation avec cela, dans le plugin ts-pegjs , nous avons implémenté le typage de sortie facultatif pour les règles de production. Numéro 11 , PR 16

Nous l'avons fait en utilisant une table de paires "rule-name": "return-type" via l'option returnTypes .

Je vous cc, juste au cas où vous décideriez d'ajouter éventuellement des informations de type sur pegjs au niveau DSL pour anonner directement les productions.
Cela pourrait être très utile pour la sortie TypeScript, également pour Flow, ou toute autre variante JS typée.

Tous les 8 commentaires

Tout ce dont j'ai réellement besoin, c'est que la signature de la fonction soit écrite comme

function parse(input: string): MyType { ... }

(ou peu importe)

Vous pouvez vous en inspirer . Au préalable, il est nécessaire d'étiqueter les types de tous les blocs de code, cela peut être fait avec des annotations . Après ce travail préparatoire, il est possible d'entrer des informations sur les types dans le générateur.

@Mingun - c'est intéressant, mais aussi très difficile à comprendre

Votre chose d'annotation semble être un cas presque idéal ici - qui permettrait l'annotation de règles d'analyse individuelles avec des types, permettant le retour de plus d'un type réel

(Le moment étrange où j'ai compris que @Mingun est aussi russe.)

En fait, TypeScript ne facilitera pas le développement des grammaires, car vous devez annoter des types partout et parce que son système de types est un peu cassé. Récemment, j'ai fait une petite expérience sur la création d'un PEG.ts, et le vérificateur de type de TypeScript a émis des messages d'erreur si horribles lorsque je l'ai alimenté avec des types récursifs, que je n'ai même pas pu le terminer.

Je recommanderais de regarder plutôt dans le support Infernu .

@polkovnikov-ph - ouais, ce choix n'est pas entre mes mains, et en plus, en tant que développeur de modèles c++ des années 1990, les messages d'erreur de dactylographie ne me font pas peur

Quoi qu'il en soit, ce dont j'ai besoin, c'est de pouvoir ajouter des analyseurs à un système de dactylographie. Il est donc utile pour moi d'obtenir des annotations de dactylographie à partir de parse/1

en ce moment, je le fais avec des types de maître bruts et des castings. j'aimerais pouvoir faire mieux

image

Salut! En relation avec cela, dans le plugin ts-pegjs , nous avons implémenté le typage de sortie facultatif pour les règles de production. Numéro 11 , PR 16

Nous l'avons fait en utilisant une table de paires "rule-name": "return-type" via l'option returnTypes .

Je vous cc, juste au cas où vous décideriez d'ajouter éventuellement des informations de type sur pegjs au niveau DSL pour anonner directement les productions.
Cela pourrait être très utile pour la sortie TypeScript, également pour Flow, ou toute autre variante JS typée.

Les gens demandent encore ça dans #597

Le nouveau responsable a créé et hébergé un .d.ts , il est donc évidemment ouvert au tapuscrit

Il s'agit d'un "nous avons tapuscrit" le jour même sans modifications majeures, qui peut être fait en cinq lignes de code plus le pied de page du module es6 de remplacement. je ne comprends pas pourquoi ce n'est pas fait

J'ai un patch prêt contre 0.11 mais 0.11 n'est pas fusionné, et 0.12 n'est pas disponible pour travailler contre

Cette page vous a été utile?
0 / 5 - 0 notes