FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par papydall Aujourd'hui à 2:58

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Hier à 18:08

» mise a jour calculatrice
par joeeee2017 Hier à 15:57

» [solved] 3D_LINE How to ?
par Jicehel Hier à 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Interpréteur langage BF

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Interpréteur langage BF   Dim 28 Juin 2015 - 2:27

Hello !

Un petit bout de code totalement "inutile", juste pour rigoler un peu :
j'ai retrouvé le source de mon interpréteur du langage Brainfuck !

Pour les Lapins ou autres bestioles à poils, il faudra attendre un peu ygeronimi...

Le code est un peu "sale" mais il a le mérite de fonctionner.
Code:


' ------------------------------------------------------------------------------
' Interpreteur langage Brainfuck par Nardo
' ------------------------------------------------------------------------------

DIM H:H=SCREEN_Y-32
LABEL Go

WIDTH 0,SCREEN_X/2:HEIGHT 0,H/2
CAPTION 0,"Brainfuck"
MEMO 1  : TOP 1,2  : LEFT 1,5  : WIDTH 1,WIDTH(0)-22 : HEIGHT 1,(H/2)-80
FONT_NAME 1,"Courier New":FONT_SIZE 1,10 : BAR_VERTICAL 1
BUTTON 4: TOP 4,HEIGHT(1)+TOP(1)+5  : LEFT 4,420 : CAPTION 4,"Go !":ON_CLICK 4,Go

DIM DEBUG:DEBUG=0
DIM a$

FORM 2: LEFT 2,SCREEN_X/2
HEIGHT 2,H : CAPTION 2,"Resultat"
WIDTH 2,SCREEN_X
PICTURE 3:PARENT 3,2:FULL_SPACE 3 : FONT_NAME 3,"Courier new"
PRINT_TARGET_IS 3
WIDTH 2,SCREEN_X/2

 FORM 30:HIDE 30:HEIGHT 30,H /2:TOP 30,H/2:WIDTH 30,SCREEN_X/2
 CAPTION 30,"Debug"
 LIST 31:PARENT 31,30:WIDTH 31,WIDTH(30)-16
 HEIGHT 31,HEIGHT(30)-80
 FONT_NAME 31,"Courier New"

LABEL ClearStack
BUTTON 32:HIDE 32:LEFT 32,10:TOP 32,TOP(4)
CAPTION 32,"Clear Debug"
ON_CLICK 32,ClearStack


' a$="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+."
READ a$
WHILE a$<>"#"
 ITEM_ADD 1,RTRIM$(a$)
 READ a$
END_WHILE

END

ClearStack:
  CLEAR 31 : HIDE 30 : HIDE 32
RETURN

Go:
  INACTIVE 4
  DIM Go_i,Go_a$
  FOR Go_i=1 TO COUNT(1)
    Go_a$=Go_a$+ITEM_READ$(1,Go_i)
  NEXT Go_i
  ' print "Les 10 premiers termes de la suite de Fibonacci, Veuillez patienter, je calcule ..."
  Interprete(Go_a$)
  FREE Go_i:FREE Go_a$
  ShowMESSAGE("Fini !")
  ACTIVE 4
RETURN

SUB Interprete(a$)
  DIM_LOCAL i%,Cde$,output$,level%,Ptr%,k$,j%
  DIM Tab(30000)
  output$="":Cde$="": Ptr%=0:level%=0
  i%=1
  StrInclude(a$,"><+-[].,$@") : a$=StrInclude$
  WHILE i% <=LEN(a$)
    Cde$=MID$(a$,i%,1)
    IF Cde$="@" THEN MESSAGE "BrkPt"
    IF Cde$="$"
      PRT_STACK(Ptr%)
    END_IF
    IF Cde$=">" THEN Ptr%=Ptr%+1
    IF Cde$="<"
      IF Ptr%<>0:Ptr%=Ptr%-1:ELSE:MESSAGE "Error Ptr < 0":TERMINATE:END_IF
    END_IF
    IF Cde$="+" THEN Tab(Ptr%)=Tab(Ptr%)+1
    IF Cde$="-" THEN Tab(Ptr%)=Tab(Ptr%)-1
    IF Cde$="["
      IF Tab(Ptr%)=0
        FOR j%=i%+1 TO LEN(a$)
          IF MID$(a$,j%,1)="["
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="]"
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF
    IF Cde$="]"
      IF Tab(Ptr%)<>0
        FOR j%=i%-1 TO 1 STEP -1
          IF MID$(a$,j%,1)="]"
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="["
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF

    IF Cde$="." THEN PRINT CHR$(Tab(Ptr%));
    IF Cde$=","
      k$=message_input$("Donnée à entrer", "valeur" , "")
      ' k$=INKEY$:WHILE k$="":k$=INKEY$:WAIT 10:END_WHILE
      Tab(Ptr%)=ASC(k$)
    END_IF
    i%=i%+1
    IF KEY_UP_CODE <> 0 THEN EXIT_WHILE
  END_WHILE
  FREE Tab(30000)
  PRINT
END_SUB

SUB PRT_STACK(Ptr%)
DIM_LOCAL j%
SHOW 30:DEBUG=0
SHOW 32
  ITEM_ADD 31,"----------------------------"
  ITEM_ADD 31,"-        STACK            -"
  ITEM_ADD 31,"----------------------------"
  FOR j%=0 TO 10
    ITEM_ADD 31,"#"+STR$(j%)+": "+STR$(Tab(j%))+" '"+CHR$(Tab(j%))+"'"
  NEXT j%
  ITEM_ADD 31,"Pointer:"+STR$(Ptr%)
END_SUB

SUB StrInclude(a$,b$)
  IF VARIABLE("StrInclude$")=0 THEN DIM StrInclude$
  DIM_LOCAL i% : StrInclude$=""
  FOR i%=1 TO LEN(a$)
    IF INSTR(b$,MID$(a$,i%,1))<>0 THEN StrInclude$=StrInclude$+MID$(a$,i%,1)
  NEXT i%
END_SUB
SUB ShowMessage(a$)
 IF OBJECT_EXISTS(100)=0
  FORM 100:HIDE 100:BORDER_HIDE 100
  TOP 100,(SCREEN_Y+HEIGHT(100))/2
  LEFT 100,(SCREEN_X+WIDTH(100))/2
  ALPHA 101:PARENT 101,100:FONT_NAME 101,"Arial"
  FONT_SIZE 101,14:COLOR 100,128,250,128
 END_IF
 CAPTION 101,a$
 WIDTH 100,TEXT_WIDTH(a$,101)+100
 HEIGHT 100,TEXT_HEIGHT(a$,101)+50
  TOP 100,(SCREEN_Y-HEIGHT(100))/2
  LEFT 100,(SCREEN_X-WIDTH(100))/2
 LEFT 101,50:TOP 101,25
 SHOW 100
 WAIT 500
 HIDE 100
END_SUB

rem ============================================================================
' Les dix premiers termes de la suite de Fibonacci
DATA "+"
DATA "++"
DATA "+++"
DATA "++++"
DATA ">+>>"
DATA ">>++++"
DATA "+++++++"
DATA "++++++++"
DATA "+++++++++"
DATA "++++++++++"
DATA "++++++>++++"
DATA "++++++++++++"
DATA "+++++++++++++"
DATA "+++<<<<<<[>[>>"
DATA ">>>>+>+<<<<<<<-"
DATA "]>>>>>>>[<<<<<<<"
DATA "+>>>>>>>-]<[>++++"
DATA "++++++[-<-[>>+>+<<"
DATA "<-]>>>[<<<+>>>-]+<["
DATA ">[-]<[-]]>[<<[>>>+<<"
DATA "<-]>>[-]]<<]>>>[>>+>+"
DATA "<<<-]>>>[<<<+>>>-]+<[>"
DATA "[-]<[-]]>[<<+>>[-]]<<<<"
DATA "<<<]>>>>>[++++++++++++++"
DATA "+++++++++++++++++++++++++"
DATA "+++++++++.[-]]++++++++++<["
DATA "->-<]>+++++++++++++++++++++"
DATA "+++++++++++++++++++++++++++."
DATA "[-]<<<<<<<<<<<<[>>>+>+<<<<-]>"
DATA ">>>[<<<<+>>>>-]<-[>>.>.<<<[-]]"
DATA "<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+"
DATA ">-]>[<+>-]<<<-]"
DATA "#"
rem ============================================================================

Des explications sur l'origine de ce langage : https://fr.wikipedia.org/wiki/Brainfuck
Bonne prise de tête !


Dernière édition par Nardo26 le Dim 28 Juin 2015 - 4:45, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 3:45

Pour me moquer de ce jour sans joie, je me suis amusé à coder en BF la suite de Fibonacci.
Hé oui, on peut faire aussi du calcul en BF.

Code:

' ------------------------------------------------------------------------------
' Interpreteur langage Brainfuck par Nardo
' ------------------------------------------------------------------------------

DIM H:H=SCREEN_Y-32
LABEL Go

WIDTH 0,SCREEN_X/2:HEIGHT 0,H/2
CAPTION 0,"Brainfuck"
MEMO 1  : TOP 1,2  : LEFT 1,5  : WIDTH 1,WIDTH(0)-22 : HEIGHT 1,(H/2)-80
FONT_NAME 1,"Courier New":FONT_SIZE 1,10 : BAR_VERTICAL 1
BUTTON 4: TOP 4,HEIGHT(1)+TOP(1)+5  : LEFT 4,420 : CAPTION 4,"Go !":ON_CLICK 4,Go

DIM DEBUG:DEBUG=0
DIM a$

FORM 2: LEFT 2,SCREEN_X/2
HEIGHT 2,H : CAPTION 2,"Resultat"
WIDTH 2,SCREEN_X
PICTURE 3:PARENT 3,2:FULL_SPACE 3 : FONT_NAME 3,"Courier new"
PRINT_TARGET_IS 3
WIDTH 2,SCREEN_X/2

 FORM 30:HIDE 30:HEIGHT 30,H /2:TOP 30,H/2:WIDTH 30,SCREEN_X/2
 CAPTION 30,"Debug"
 LIST 31:PARENT 31,30:WIDTH 31,WIDTH(30)-16
 HEIGHT 31,HEIGHT(30)-80
 FONT_NAME 31,"Courier New"

LABEL ClearStack
BUTTON 32:HIDE 32:LEFT 32,10:TOP 32,TOP(4)
CAPTION 32,"Clear Debug"
ON_CLICK 32,ClearStack


' a$="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+."
READ a$
WHILE a$<>"#"
 ITEM_ADD 1,RTRIM$(a$)
 READ a$
END_WHILE

END

ClearStack:
  CLEAR 31 : HIDE 30 : HIDE 32
RETURN

Go:
  INACTIVE 4
  DIM Go_i,Go_a$
  FOR Go_i=1 TO COUNT(1)
    Go_a$=Go_a$+ITEM_READ$(1,Go_i)
  NEXT Go_i
  print "Les 10 premiers termes de la suite de Fibonacci, Veuillez patienter, je calcule ..."
  Interprete(Go_a$)
  FREE Go_i:FREE Go_a$
  ShowMESSAGE("Fini !")
  ACTIVE 4
RETURN

SUB Interprete(a$)
  DIM_LOCAL i%,Cde$,output$,level%,Ptr%,k$,j%
  DIM Tab(30000)
  output$="":Cde$="": Ptr%=0:level%=0
  i%=1
  StrInclude(a$,"><+-[].,$@") : a$=StrInclude$
  WHILE i% <=LEN(a$)
    Cde$=MID$(a$,i%,1)
    IF Cde$="@" THEN MESSAGE "BrkPt"
    IF Cde$="$"
      PRT_STACK(Ptr%)
    END_IF
    IF Cde$=">" THEN Ptr%=Ptr%+1
    IF Cde$="<"
      IF Ptr%<>0:Ptr%=Ptr%-1:ELSE:MESSAGE "Error Ptr < 0":TERMINATE:END_IF
    END_IF
    IF Cde$="+" THEN Tab(Ptr%)=Tab(Ptr%)+1
    IF Cde$="-" THEN Tab(Ptr%)=Tab(Ptr%)-1
    IF Cde$="["
      IF Tab(Ptr%)=0
        FOR j%=i%+1 TO LEN(a$)
          IF MID$(a$,j%,1)="["
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="]"
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF
    IF Cde$="]"
      IF Tab(Ptr%)<>0
        FOR j%=i%-1 TO 1 STEP -1
          IF MID$(a$,j%,1)="]"
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="["
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF

    IF Cde$="." THEN PRINT CHR$(Tab(Ptr%));
    IF Cde$=","
      k$=INKEY$:WHILE k$="":k$=INKEY$:WAIT 10:END_WHILE
      Tab(Ptr%)=ASC(k$)
    END_IF
    i%=i%+1
    IF KEY_UP_CODE <> 0 THEN EXIT_WHILE
  END_WHILE
  FREE Tab(30000)
  PRINT
END_SUB

SUB PRT_STACK(Ptr%)
DIM_LOCAL j%
SHOW 30:DEBUG=0
SHOW 32
  ITEM_ADD 31,"----------------------------"
  ITEM_ADD 31,"-        STACK            -"
  ITEM_ADD 31,"----------------------------"
  FOR j%=0 TO 10
    ITEM_ADD 31,"#"+STR$(j%)+": "+STR$(Tab(j%))+" '"+CHR$(Tab(j%))+"'"
  NEXT j%
  ITEM_ADD 31,"Pointer:"+STR$(Ptr%)
END_SUB

SUB StrInclude(a$,b$)
  IF VARIABLE("StrInclude$")=0 THEN DIM StrInclude$
  DIM_LOCAL i% : StrInclude$=""
  FOR i%=1 TO LEN(a$)
    IF INSTR(b$,MID$(a$,i%,1))<>0 THEN StrInclude$=StrInclude$+MID$(a$,i%,1)
  NEXT i%
END_SUB
SUB ShowMessage(a$)
 IF OBJECT_EXISTS(100)=0
  FORM 100:HIDE 100:BORDER_HIDE 100
  TOP 100,(SCREEN_Y+HEIGHT(100))/2
  LEFT 100,(SCREEN_X+WIDTH(100))/2
  ALPHA 101:PARENT 101,100:FONT_NAME 101,"Arial"
  FONT_SIZE 101,14:COLOR 100,128,250,128
 END_IF
 CAPTION 101,a$
 WIDTH 100,TEXT_WIDTH(a$,101)+100
 HEIGHT 100,TEXT_HEIGHT(a$,101)+50
  TOP 100,(SCREEN_Y-HEIGHT(100))/2
  LEFT 100,(SCREEN_X-WIDTH(100))/2
 LEFT 101,50:TOP 101,25
 SHOW 100
 WAIT 500
 HIDE 100
END_SUB

rem ============================================================================
' Les dix premiers termes de la suite de Fibonacci
DATA "+"
DATA "++"
DATA "+++"
DATA "++++"
DATA ">+>>"
DATA ">>++++"
DATA "+++++++"
DATA "++++++++"
DATA "+++++++++"
DATA "++++++++++"
DATA "++++++>++++"
DATA "++++++++++++"
DATA "+++++++++++++"
DATA "+++<<<<<<[>[>>"
DATA ">>>>+>+<<<<<<<-"
DATA "]>>>>>>>[<<<<<<<"
DATA "+>>>>>>>-]<[>++++"
DATA "++++++[-<-[>>+>+<<"
DATA "<-]>>>[<<<+>>>-]+<["
DATA ">[-]<[-]]>[<<[>>>+<<"
DATA "<-]>>[-]]<<]>>>[>>+>+"
DATA "<<<-]>>>[<<<+>>>-]+<[>"
DATA "[-]<[-]]>[<<+>>[-]]<<<<"
DATA "<<<]>>>>>[++++++++++++++"
DATA "+++++++++++++++++++++++++"
DATA "+++++++++.[-]]++++++++++<["
DATA "->-<]>+++++++++++++++++++++"
DATA "+++++++++++++++++++++++++++."
DATA "[-]<<<<<<<<<<<<[>>>+>+<<<<-]>"
DATA ">>>[<<<<+>>>>-]<-[>>.>.<<<[-]]"
DATA "<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+"
DATA ">-]>[<+>-]<<<-]"
DATA "#"
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 4:01

Bon tu m'a grille pour Fibonacci...

Quelques exemples !

Suite de Fibonacci (pas tout à fait le même code)
Cet exemple ne s'arrête pas tout seul : appuyez sur ESC pour sortir.
>++++++++++>+>+[
   [+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[
       [-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-
           [>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>
   ]<<<
]


Les des nombres au carré (touche ESC pour sortir)
++++[>+++++<-]>[<+++++>-]+<+[
   >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+
   >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]
   <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-
]

Un decompte de 9 à 0
++++++++++[>+>+<<-]
>>+++++++++++++++++++++++++++++++++++++++++++++++<<
++++++++++[>>.-<.<-]


mandelbrot
Là vous pouvez aller boire le café, faire vos courses avant de commencer à voir apparaitre quelque chose...

Spoiler:
 
Au final on obtient ceci :
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
papydall

avatar

Nombre de messages : 5546
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 5:02

Bon, amusons-nous!
Voici le calcul de factorielle N!

Code:

' ------------------------------------------------------------------------------
' Interpreteur langage Brainfuck par Nardo
' ------------------------------------------------------------------------------

DIM H:H=SCREEN_Y-32
LABEL Go

WIDTH 0,SCREEN_X/2:HEIGHT 0,H/2
CAPTION 0,"Brainfuck"
MEMO 1  : TOP 1,2  : LEFT 1,5  : WIDTH 1,WIDTH(0)-22 : HEIGHT 1,(H/2)-80
FONT_NAME 1,"Courier New":FONT_SIZE 1,10 : BAR_VERTICAL 1
BUTTON 4: TOP 4,HEIGHT(1)+TOP(1)+5  : LEFT 4,420 : CAPTION 4,"Go !":ON_CLICK 4,Go

DIM DEBUG:DEBUG=0
DIM a$

FORM 2: LEFT 2,SCREEN_X/2
HEIGHT 2,H : CAPTION 2,"Resultat"
WIDTH 2,SCREEN_X
PICTURE 3:PARENT 3,2:FULL_SPACE 3 : FONT_NAME 3,"Courier new"
PRINT_TARGET_IS 3
WIDTH 2,SCREEN_X/2

 FORM 30:HIDE 30:HEIGHT 30,H /2:TOP 30,H/2:WIDTH 30,SCREEN_X/2
 CAPTION 30,"Debug"
 LIST 31:PARENT 31,30:WIDTH 31,WIDTH(30)-16
 HEIGHT 31,HEIGHT(30)-80
 FONT_NAME 31,"Courier New"

LABEL ClearStack
BUTTON 32:HIDE 32:LEFT 32,10:TOP 32,TOP(4)
CAPTION 32,"Clear Debug"
ON_CLICK 32,ClearStack


' a$="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+."
READ a$
WHILE a$<>"#"
 ITEM_ADD 1,RTRIM$(a$)
 READ a$
END_WHILE

END

ClearStack:
  CLEAR 31 : HIDE 30 : HIDE 32
RETURN

Go:
  INACTIVE 4
  DIM Go_i,Go_a$
  FOR Go_i=1 TO COUNT(1)
    Go_a$=Go_a$+ITEM_READ$(1,Go_i)
  NEXT Go_i
  print "Calcul de factorielle N! (à partir de 0!............. <Une touche pour arrêter"
  Interprete(Go_a$)
  FREE Go_i:FREE Go_a$
  ShowMESSAGE("Fini !")
  ACTIVE 4
RETURN

SUB Interprete(a$)
  DIM_LOCAL i%,Cde$,output$,level%,Ptr%,k$,j%
  DIM Tab(30000)
  output$="":Cde$="": Ptr%=0:level%=0
  i%=1
  StrInclude(a$,"><+-[].,$@") : a$=StrInclude$
  WHILE i% <=LEN(a$)
    Cde$=MID$(a$,i%,1)
    IF Cde$="@" THEN MESSAGE "BrkPt"
    IF Cde$="$"
      PRT_STACK(Ptr%)
    END_IF
    IF Cde$=">" THEN Ptr%=Ptr%+1
    IF Cde$="<"
      IF Ptr%<>0:Ptr%=Ptr%-1:ELSE:MESSAGE "Error Ptr < 0":TERMINATE:END_IF
    END_IF
    IF Cde$="+" THEN Tab(Ptr%)=Tab(Ptr%)+1
    IF Cde$="-" THEN Tab(Ptr%)=Tab(Ptr%)-1
    IF Cde$="["
      IF Tab(Ptr%)=0
        FOR j%=i%+1 TO LEN(a$)
          IF MID$(a$,j%,1)="["
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="]"
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF
    IF Cde$="]"
      IF Tab(Ptr%)<>0
        FOR j%=i%-1 TO 1 STEP -1
          IF MID$(a$,j%,1)="]"
            level%=level%+1
          ELSE
            IF MID$(a$,j%,1)="["
              IF Level%=0 THEN i%=j%:EXIT_FOR
              Level%=Level%-1
            END_IF
          END_IF
        NEXT j%
      END_IF
    END_IF

    IF Cde$="." THEN PRINT CHR$(Tab(Ptr%));
    IF Cde$=","
      k$=INKEY$:WHILE k$="":k$=INKEY$:WAIT 10:END_WHILE
      Tab(Ptr%)=ASC(k$)
    END_IF
    i%=i%+1
    IF KEY_UP_CODE <> 0 THEN EXIT_WHILE
  END_WHILE
  FREE Tab(30000)
  PRINT
END_SUB

SUB PRT_STACK(Ptr%)
DIM_LOCAL j%
SHOW 30:DEBUG=0
SHOW 32
  ITEM_ADD 31,"----------------------------"
  ITEM_ADD 31,"-        STACK            -"
  ITEM_ADD 31,"----------------------------"
  FOR j%=0 TO 10
    ITEM_ADD 31,"#"+STR$(j%)+": "+STR$(Tab(j%))+" '"+CHR$(Tab(j%))+"'"
  NEXT j%
  ITEM_ADD 31,"Pointer:"+STR$(Ptr%)
END_SUB

SUB StrInclude(a$,b$)
  IF VARIABLE("StrInclude$")=0 THEN DIM StrInclude$
  DIM_LOCAL i% : StrInclude$=""
  FOR i%=1 TO LEN(a$)
    IF INSTR(b$,MID$(a$,i%,1))<>0 THEN StrInclude$=StrInclude$+MID$(a$,i%,1)
  NEXT i%
END_SUB
SUB ShowMessage(a$)
 IF OBJECT_EXISTS(100)=0
  FORM 100:HIDE 100:BORDER_HIDE 100
  TOP 100,(SCREEN_Y+HEIGHT(100))/2
  LEFT 100,(SCREEN_X+WIDTH(100))/2
  ALPHA 101:PARENT 101,100:FONT_NAME 101,"Arial"
  FONT_SIZE 101,14:COLOR 100,128,250,128
 END_IF
 CAPTION 101,a$
 WIDTH 100,TEXT_WIDTH(a$,101)+100
 HEIGHT 100,TEXT_HEIGHT(a$,101)+50
  TOP 100,(SCREEN_Y-HEIGHT(100))/2
  LEFT 100,(SCREEN_X-WIDTH(100))/2
 LEFT 101,50:TOP 101,25
 SHOW 100
 WAIT 500
 HIDE 100
END_SUB
rem ============================================================================



DATA ">++++++++++"
DATA ">>>+"
DATA ">+"
DATA "[>>>+"
DATA "[-"
DATA "[<<<<<[+<<<<<]>>[[-]>[<<+>+>-]<[>+<-]<[>+<-[>+<-[>"
DATA "+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>>>>+>+<<<<<<-[>+<-]]]]]]]]]]]>[<+>-"
DATA "]+>>>>>]<<<<<[<<<<<]>>>>>>>[>>>>>]++[-<<<<<]>>>>>>-]+>>>>>]<[>++<-]<<<<[<["
DATA ">+<-]<<<<]>>[->[-]++++++[<++++++++>-]>>>>]<<<<<[<[>+>+<<-]>.<<<<<]>.>>>>]"

DATA "#"
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 7:19

inutile mais original !

Là, a ce niveau, les dolipranes ne font même plus effet...

Je ne connaissais pas ce langage et ses dérivés.
Je m'imagine bien coder mon programme GPP comme ça. Bin je suis pas arrivé.

affraid affraid lol!

Merci a tous les 2 Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 10:21

Faut pas quantifier en cachet mais en boite à ce stade !!! tu as vu le code de Mandelbrot (spoiler) ?
C'est pratiquement un raisonnement en langage assembleur... (d'où Turing)

@Papydall : j'ai modifié la commande "," (saisie de caractère) car elle ne fonctionnait pas vraiment (cf le source du début).
Tu peux faire un copier/coller d'un prog dans le memo : ça t'evite de le mettre à chaque fois dans les datas... Wink

Une chose aussi qu'il reste à arranger c'est l'appui sur la touche ESC pour sortir d'une boucle infernale:
décidément cette touche ne veut pas fonctionner correctement sur mon PC...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 28 Juin 2015 - 13:50

affraid affraid C' est du délire ces langages...

Moi qui plaisantais avec mes lapins...
Et, effectivement ce n' est pas de cachet de doliprane qu' il faut mais du valium en perfusion.
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Interpréteur langage BF   Dim 28 Juin 2015 - 15:03

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>--------------. +++++++++++++++++++. +++++++++++++. -----------------. <<++. >++++++++++. >----. +++++++++++++. +. +++. <+++++++++++++++++. >-----. ----. <++. <. +. -. >---------------------------------. >++++++. -. <<. >>+++++++++. ------------------. . ++++++. <<+++++++++++++. >>------. +++++++++. ----------. <<-------------. +. -. >--------. <+++++++++.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Contenu sponsorisé




MessageSujet: Re: Interpréteur langage BF   

Revenir en haut Aller en bas
 
Interpréteur langage BF
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Langage Objet - static
» Questions - Futur de Panoramic Langage
» Toujours pour les férus d'électronique
» Pour les vrais débutants en programmation
» besion d'aide language html lecteur de musique !! (Résolu)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les inutilitaires-
Sauter vers: