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
» un nouveau editeur panobasic
par pascal10000 Hier à 21:52

» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Jack Hier à 20:23

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Hier à 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Hier à 19:58

» Compilateur FBPano
par jean_debord Hier à 8:49

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

» A chacun son point de vue
par papydall Mar 8 Aoû 2017 - 17:20

» Problème avec les chaines de caractères
par bignono Dim 6 Aoû 2017 - 9:33

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
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 : 5501
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 : 5501
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 : 50
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 : 7961
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
-
» PHP sécurite
» [Résolu] Problème de langage du forum
» problème d’interprétation des caractères chinois sur mon forum
» Langage Objet - static
» Questions - Futur de Panoramic Langage

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