Difference between revisions of "Speeding Simplified Script Language"

From air
Jump to navigation Jump to search
 
(7 intermediate revisions by 2 users not shown)
Line 17: Line 17:
 
** type de variable simple
 
** type de variable simple
   
 
= Divers =
= Piste de développement =
 
  +
== Notes ==
  +
* L'indentation ne peut pas être traiter par un parser de type PEG (qui ne traite que ''context-free grammar'',
  +
les langages comme Python sont ''context-sensitive grammar'' )
  +
- Voir http://stackoverflow.com/questions/4205442/peg-for-python-style-indentation
   
  +
- On peurrendre explicite les blocs de code avec le module token avant de passer par le parser:
* Apprendre Python
 
  +
* Apprendre Go
 
  +
from tokenize import tokenize, untokenize, NAME, INDENT, DEDENT
* Créer un code Python extrémement simple
 
  +
from io import BytesIO
** obtenir l'AST associé
 
  +
** comprendre cet AST
 
  +
def indentation_explicitation(s):
* Définir le langage SSSL
 
  +
result = []
* Traducteur AST -> SSSL
 
  +
g = tokenize(BytesIO(s.encode('utf-8')).readline) # tokenize the string
* Traducteur SSSL -> Go
 
  +
for toknum, tokval, _, _, _ in g:
* ?
 
  +
if toknum == INDENT: # replace NUMBER tokens
* Profit
 
  +
result.extend([
  +
(NAME, '<INDENT>')
  +
])
  +
elif toknum == DEDENT:
  +
result.extend([
  +
(NAME, '<DEDENT>')
  +
])
  +
else:
  +
result.append((toknum, tokval))
  +
return untokenize(result).decode('utf-8')
  +
  +
s = """
  +
def a(b):
  +
if b:
  +
print('yop')
  +
else:
  +
print('poy')
  +
  +
b = b + 1
  +
  +
a(true)
  +
"""
  +
print(indentation_explicitation(s))
  +
  +
Ce qui donne:
  +
  +
(env3.4)auguste@akira:~/work/15-16/kael (master)> python token_ex.py
  +
  +
def a (b ):
  +
<INDENT> if b :
  +
<INDENT> print ('yop')
  +
<DEDENT> else :
  +
<INDENT> print ('poy')
  +
  +
<DEDENT> b =b +1
  +
  +
<DEDENT> a (true )
   
= Divers =
 
 
== Liens utiles ==
 
== Liens utiles ==
* GitHub: https://github.com/FlorianPO/Speeding-Simplified-Script-Language
 
 
* AST: https://docs.python.org/3.4/library/ast.html
 
* AST: https://docs.python.org/3.4/library/ast.html
  +
* Grako (A generator of PEG/Packrat parsers from EBNF grammars.): https://pypi.python.org/pypi/grako/3.6.6
 
  +
* Liste de parser en python: https://wiki.python.org/moin/LanguageParsing
  +
  +
* '''A Lire''' Parsing expression grammar ('''PEG''''): https://en.wikipedia.org/wiki/Parsing_expression_grammar
  +
 
* '''Grako''' (A generator of PEG/Packrat parsers from EBNF grammars): https://pypi.python.org/pypi/grako/3.6.6
  +
** DOC: https://bitbucket.org/apalala/grako
  +
** http://stackoverflow.com/questions/tagged/grako
  +
** http://stackoverflow.com/tags/grako/info
  +
  +
* '''Arpeggio''' http://igordejanovic.net/Arpeggio/
   
 
== Installation d'Astmonkey ==
 
== Installation d'Astmonkey ==
Line 42: Line 91:
 
* Décompresser (unzip) et installer par '''python setup.py install'''
 
* Décompresser (unzip) et installer par '''python setup.py install'''
 
* Installer Astmonkey par '''pip install astmonkey'''
 
* Installer Astmonkey par '''pip install astmonkey'''
 
== Journal de Bord ==
 
=== Semaine 1 ===
 
Prise de connaissance du sujet et des technologies mises en jeu (beaucoup de doc à lire).
 
* Mise en place de l'environnement de développement Python (IDE + dépendances / pré-requis)
 
* Création du Git https://github.com/FlorianPO/Speeding-Simplified-Script-Language
 
* Axes de recherche établis, plan de travail débroussaillé
 

Latest revision as of 10:53, 13 February 2016

Objectif

Le but à long terme de ce projet est de pouvoir partager des codes sources simples de différent langage de scripts, de permettre une execution efficace de ces codes par traduction en langage compilable et permettre l'interaction avec ce code compilé depuis les différents langages de script.

Dans un premier temps on se propose d'identifier un langage de script minimal proche de Python et Ruby. De traduire ce language dans un langage compilable (C++ ou le langage Go) et de permettre l'interaction entre les langages de script et le version compilée.

Les contraintes technologigues

Plan de travail

Divers

Notes

  • L'indentation ne peut pas être traiter par un parser de type PEG (qui ne traite que context-free grammar,

les langages comme Python sont context-sensitive grammar ) - Voir http://stackoverflow.com/questions/4205442/peg-for-python-style-indentation

- On peurrendre explicite les blocs de code avec le module token avant de passer par le parser:

from tokenize import tokenize, untokenize, NAME, INDENT, DEDENT
from io import BytesIO

def indentation_explicitation(s):
    result = []
    g = tokenize(BytesIO(s.encode('utf-8')).readline)  # tokenize the string
    for toknum, tokval, _, _, _ in g:
        if toknum == INDENT:  # replace NUMBER tokens
            result.extend([
                (NAME, '<INDENT>')
            ])
        elif toknum == DEDENT:
            result.extend([
                (NAME, '<DEDENT>')
            ])
        else:
            result.append((toknum, tokval))
    return untokenize(result).decode('utf-8')

s = """
def a(b):
   if b:
       print('yop')
   else:
       print('poy')

   b = b + 1

a(true)
"""
print(indentation_explicitation(s))

Ce qui donne:

(env3.4)auguste@akira:~/work/15-16/kael (master)> python token_ex.py 

def a (b ):
<INDENT> if b :
<INDENT> print ('yop')
<DEDENT> else :
<INDENT> print ('poy')

<DEDENT> b =b +1 

<DEDENT> a (true )

Liens utiles

Installation d'Astmonkey

  • Python 3.4
  • Installation de pydot
  • Récupérer une archive de https://github.com/nlhepler/pydot
  • Décompresser (unzip) et installer par python setup.py install
  • Installer Astmonkey par pip install astmonkey