π
<-
Chat plein-écran
[^]

Analyse lexicale et syntaxique -nouveau langage oncalc ti83p

Assembleur, Axe, C/C++, ICE...

Analyse lexicale et syntaxique -nouveau langage oncalc ti83p

Unread postby newprog_creator » 04 Sep 2021, 18:36

Bonjour à la communauté ti,
Par le passé, j'ai déjà créer un langage de programmation qui s'appelle Newprog (Ti89).
Je reviens dans ce forum pour poser une question assez pointue. Je m'intéresse à créer un langage de programmation sur ti83pce ou sur nspire cx qui serait pour commencer interprété (en byte code type java, python ou Newprog sur ti89). Je souhaiterai que le code de ce nouveau langage de programmation soit codé en texte pur (par exemple, l'instruction 'for' codée en 3 lettres) et non pas en utilisant les mots clés prédéfinis.
Pour la TI83pce, je connais bien le fameux ICE Compiler, très bien par ailleurs, mais qui est pour moi trop rigide dans l'écriture de ses expressions. Je souhaiterai un langage permettant la saisie de commande plus complexes et élégantes à la manière de tout langage évolué (c, tibasic (ti89))
Pour le langage Newprog, je n'ai pas eu a coder un lexer/parser car j'utilisais celui du Tibasic de l'os de la calculatrice ti89. Mais sur ti83pce, je ne peux pas car la calculatrice ne fonctionne pas de la même manière.
Pour combler ce manque, je me suis mis à la tâche pour tenter de coder ces fonctionnalités. Il m'était impossible d'utiliser les lexers parsers du monde pc (type lex bison) car il ne peuvent pas être utilisés avec les compilateurs c des calculatrices. Il existe bien celui codé sur visual basic v6 par kevin koffler mais il m'est impossible de le traduire en langage c (visual basic v6 trop vieux pour trouver des convertisseurs de langages). Alors j'ai codé un lexeur ce qui n'a pas été trop compliqué mais je bloque durablement sur le parser. C'est une tâche très ardue et je ne trouve pas de code source c le codant de a à z (cad sans bison par exemple).
Quelqu'un pourrait t-il me donner des infos pour coder ce parser ?
Je sais c"est très pointu...
Merci par avance
User avatar
newprog_creatorMembre
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 6.3%
 
Posts: 42
Joined: 29 Mar 2014, 19:07
Gender: Not specified
Calculator(s):
Class: bac+13

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby Bisam » 05 Sep 2021, 10:00

As-tu déjà établi une grammaire du langage ?
Sais-tu déjà comment tu vas représenter les différents éléments de ton arbre de syntaxe abstraite ? ainsi que l'arbre lui-même ?
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 54.1%
 
Posts: 5588
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby newprog_creator » 05 Sep 2021, 11:57

Merci pour la réponse.
Je souhaiterai utiliser la même grammaire que le tibasic de la ti89 avec en plus quelques emprunts au c tels que les opérateurs suivants :
=(affectation) == < > <= >=
<< >> ++ -- += -= *= /=
Ces opérateurs ascii permettraient de pouvoir coder sur pc directement dans le bloc note.

Pour l'arbre, je souhaite le même que celui utilisé par le tibasic de la ti89 également.
Merci pour votre aide
User avatar
newprog_creatorMembre
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 6.3%
 
Posts: 42
Joined: 29 Mar 2014, 19:07
Gender: Not specified
Calculator(s):
Class: bac+13

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby Bisam » 05 Sep 2021, 13:34

En fait, je me demandais si tu avais fait un travail plus approfondi à ce sujet.

Pour ce qui est de la grammaire :
  • Quelles sont les types d'unités lexicales ? Quels types parmi ceux-ci constituent des classes fermées ? ouvertes ?
  • Quels sont les délimiteurs ?
  • Quelles sont les règles permettant de retrouver les syntagmes à partir des unités lexicales ?

Pour ce qui est de la représentation de l'AST :
  • Quel langage vas-tu utiliser pour interpréter ?
  • Dans ce langage, as-tu besoin de gérer la mémoire "à la main" ?
  • Dans ce langage, quels sont les types d'objets que tu vas utiliser pour représenter les lexèmes ? les syntagmes ?
  • Vas-tu interpréter "à la volée", ou bien vas-tu d'abord construire la totalité de l'arbre puis interpréter l'arbre ?

On ne peut pas répondre à toutes ces questions à ta place.
Je te conseille de lire des cours de compilation, d'analyse lexicale et syntaxique en informatique, par exemple celui-ci, même s'il est un peu "vieux".
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 54.1%
 
Posts: 5588
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby newprog_creator » 05 Sep 2021, 14:50

Pour les trois premières questions, la réponse est idem tibasic ti68k.
Dans l'idéal, je souhaiterai la même chose que ce que faisait "tokens ocx" de Kevin kofler mais qui soit en langage c pour pouvoir être exécuté oncalc (et non en visual basic 6). L'ajout des opérateurs ascii cités plus hauts serait un plus.
Pour informations, le compilateur Newprog se basait sur l'arbre tibasic et le modifiait plutôt légèrement pour gagner en temps d'exécution.
Pour les quatres dernières questions :
-Toujours comme en Newprog, le langage d'interprétation est le c
-La mémoire sera toujours gérée à la main
-Idem tibasic
-L'arbre est créé en totalité avant exécution

J'ai pris connaissance du cours que tu m'as transmis. Je me sens pas capable d'ingérer tant d'informations. J'ai bien peur du coup que si je fasse le fasse moi même, j'abandonne le projet. L'idéal serait de s'inspirer de travaux déjà réalisés s'inspirant du tibasic ti68k, mais je n'en ai pas trouvé sur internet (par contre j'en ai vu pour le tibasic ti83).
Ca s'avère très compliqué.... :-(
User avatar
newprog_creatorMembre
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 6.3%
 
Posts: 42
Joined: 29 Mar 2014, 19:07
Gender: Not specified
Calculator(s):
Class: bac+13

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby newprog_creator » 13 Sep 2021, 21:00

Je déterre le fil.

Je reviens vers vous car je crois que j'ai trouvé une solution qui me permettrait de résoudre en grande partie mon problème.
J'ai trouvé que l'algorithme de shunting-yard est assez simple à implémenter et pourrait me convenir (avec quelques ajustements). D'ailleurs c'est l'algorithme utilisé par l'axe parser.
Un arbre postfix ainsi généré (ou rpn si j'ai bien compris) me suffirait comme base pour mon nouveau langage.
J'ai trouvé sur wikipédia l'algorithme (qui permet l'utilisation de fonctions, ce qui est indispensable pour mon projet), le voici recopié :

tant qu’il y a des tokens à lire :
lire le token.
si c’est un nombre l’ajouter à la sortie.
si c'est une fonction, le mettre sur la pile.
si c'est un séparateur d'arguments de fonction (par exemple une virgule) :
jusqu'à ce que l'élément au sommet de la pile soit une parenthèse gauche, retirer l'élément du sommet de la pile et l'ajouter à la sortie. Si toute la pile est dépilée sans trouver de parenthèse gauche, c’est qu’il y a un mauvais parenthésage.
si c’est un opérateur o1 alors
1) tant qu’il y a un opérateur o2 sur le haut de la pile et si l’une des conditions suivantes est remplie.
o1 est associatif ou associatif à gauche et sa priorité est inférieure ou égale à celle d’o2, ou
o1 est associatif à droite et sa priorité est inférieure à celle d’o2,
retirer o2 de la pile pour le mettre dans la sortie
2) mettre o1 sur la pile
si le token est une parenthèse gauche, le mettre sur la pile.
si le token est une parenthèse droite, alors dépiler les opérateurs et les mettre dans la sortie jusqu’à la parenthèse gauche qui elle aussi sera dépilée, mais pas mise dans la sortie. Après cela, si le token au sommet de la pile est une fonction, le dépiler également pour l'ajouter à la sortie. Si toute la pile est dépilée sans trouver de parenthèse gauche c’est qu’il y a un mauvais parenthésage.
après la lecture du dernier token, s'il reste des éléments dans la pile il faut tous les dépiler pour les mettre dans la sortie (il ne doit y avoir que des opérateurs. Si on trouve une parenthèse gauche alors il y a eu un mauvais parenthésage).

Il y a un point que je ne parviens pas à comprendre. Ce point doit pourtant être trivial car personne sur le net ne l'explique. Ce sont les termes "opérateurs o1 et o2". Quels sont les différences entre les deux ?
Je pense que quelqu'un d'aviser pourra facilement me répondre.
Merci par avance...
User avatar
newprog_creatorMembre
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 6.3%
 
Posts: 42
Joined: 29 Mar 2014, 19:07
Gender: Not specified
Calculator(s):
Class: bac+13

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby SlyVTT » 13 Sep 2021, 22:21

o1 et o2 sont des opérateurs quelconques , par exemple addition + ou division /.
Il faut donc analyser leur priorisation

C'est un défaut de traduction, regarde cet article en anglais qui me semble plus limpide : https://brilliant.org/wiki/shunting-yard-algorithm/
Developing the GUI Toolkit for nSpire
see current revision here : https://github.com/SlyVTT/Widget-for-TI-NSpire

And for the GUI Toolkit NF (New Foundation), this is here https://github.com/SlyVTT/Widgets-Spire-NF

Image Image Image Image
User avatar
SlyVTTProgrammeur
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 77%
 
Posts: 138
Images: 0
Joined: 19 Jan 2021, 09:41
Gender: Male
Calculator(s):

Re: Analyse lexicale et syntaxique -nouveau langage oncalc t

Unread postby rentech7289 » Yesterday, 17:22

Ce point doit pourtant être trivial car personne sur le net ne l'explique. Ce sont les termes "opérateurs o1 et o2". Quels sont les différences entre les deux ?

La différence est l'ordre de priorité entre les opérateurs et les différentes fonctions disponibles. Il s'agit de décomposer une formule de calcul en un arbre logique respectant celles-ci, puis de le traduire en une formule linéaire directement calculable par la machine. C'est la traduction informatique de la façon scolaire de décomposer un calcul en une suite d'opérations. Dans la NPI, la différence étant que les opérateurs viennent après les variables.
https://fr.wikipedia.org/wiki/Notations_infix%C3%A9e,_pr%C3%A9fix%C3%A9e,_polonaise_et_postfix%C3%A9e
La section Analogue en langage naturel de la la partie Notation postfixée illustre mieux ce principe que l'Illustration de l'algorithme de la page https://fr.wikipedia.org/wiki/Algorithme_Shunting-yard.
User avatar
rentech7289Membre
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 15.6%
 
Posts: 73
Joined: 16 Aug 2021, 02:40
Location: Lorraine luxembourgeoise
Gender: Male
Calculator(s):


Return to Langages alternatifs

Who is online

Users browsing this forum: No registered users and 4 guests

-
Search
-
Social
-
Featured topics
Concours de rentrée 2021 - La Geste d'Alrys
Concours de rentrée 2021 - Synchro-donjon !
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Remplace ton ancienne fx-92 Collège ou Graph 35 par la nouvelle Graph 35+E II programmable en Python ! Pour tout achat d'une nouvelle Graph 35 d'ici le 30 septembre 2021, Casio te rembourse 10€. En cas de retour de ta fx-92 Collège c'est 18€, et même ou 23€ si tu retournes ton ancienne Graph 35. Etiquette de retour fournie, pas de frais de port à payer, même les anciens modèles et machines non fonctionnelles sont acceptées. En partenariat avec les Restos du cœur.
Remplace ton ancienne fx-92 Collège ou Graph 35 par la Graph 90+E couleur. Pour tout achat, Casio te rembourse 10€ en cas de retour de ta fx-92 Collège, ou 15€ en cas de retour de ta Graph 35. Etiquette de retour fournie, pas de frais de port à payer, même les anciens modèles et machines non fonctionnelles sont acceptées. En partenariat avec les Restos du coeur.
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 30 Septembre 2021
Reprise de ton ancienne fx-92 Collège à 5€ ou Graph 35 à 10€. Même non fonctionnelle ou ancien modèle. Etiquette de retour fournie, pas de frais de port à payer. En partenariat avec les Restos du coeur.
25€ remboursés par Casio sur l'achat de ta calculatrice fx-CP400 d'ici le 31 Octobre 2021
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2021
Casio Graph 90+E ou Graph 35+E II avec couvercle personnalisé à gagner sur simple participation aux formations Casio de Septembre 2021.
Coque NumWorks édition limitée Septembre 2021 à gagner.
1234567891011
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
679 utilisateurs:
>665 invités
>8 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)