Eigene Programmiersprache in Batch geschrieben?

3 Antworten

Das ganze dürfte wohl unter Just for Fun laufen.

Ich habe in den letzten halben Stunde einen kleinen Blubb-Parser geschrieben der die Blubb-Sprache Interpretiert. Blubb kennt nur drei Befehle:

  • "Blubbo" gibt einen Text aus
  • "Blubbadd" zeigt das Ergebniss zweier Zahlen.
  • "Blubberbox"... eigentlich ähnlich blubbo zeigt einen Text an...
  • mehr kann er nicht.. und meckert natürlich über Befehle die er nicht kennt.

immerhin kann man den definierten Befehlen andere Parameter übergeben:

Mein.blubb:

blubbo ich bin irgendein Text
blubbo Das Ergebniss von 17 + 4 ist...
blubbadd  17 4
blubbo


blubbo Hallo Welt
blubbo Ich kann auch 96768 + 1044 berechnen......
blubbadd  96768 1044
blubbo


blubberbox  Hallo winke winke...huhu
blubberbox  Achnee , das isses...


blubbende programm

little_Dirty_parser.cmd

@echo off
  rem  seeeeehr simpler Parser ;)   ...kennt  nur 3 Befehle  blubbo zeigt  einee Zeile Text , blubbadd zeigt die summe von zwei integern... 
  rem und Blubberbox zeigt  eine Messagebox...
for /f "usebackq tokens=1*" %%a in ("Mein.blubb") do (
      rem %%a enthällt das erste token "den Befehl" %%b den Rest der Zeile
      rem nachschauen ob das erste Token einen Bekannten Befehl enthält
      rem ..wäre  auch per f gegangen, ...aber  ich  habe  gerade meine Find(ungs)-Phase ;)
          echo %%a |find /i "blubbo" >nul &&(call :blubbo %%b & set "BefehlOK=1")
          echo %%a |find /i "blubbadd" >nul &&(call :blubbadd  %%b & set "BefehlOK=1")
          echo %%a |find /i "blubberbox" >nul &&(call :blubberbox  %%b & set "BefehlOK=1")
            rem fehler Behandlung 
          if not defined BefehlOK (
              echo unbekannter Befehl: "%%a"
          )
        rem erfolgsintikator  zurücksetzen...
      set "BefehlOK="
      )
      pause
      exit /b
      
      ::Fall Behandlungs Subroutinen
      :blubbo
      echo:%*
      exit /b
      
      :blubbadd
      set /a "_result=%1+%2"
      echo %_result%
      exit /b
      
      :blubberbox
      echo new ActiveXObject("wscript.shell").Popup ('%*',0,'BlubberBox',48)>"%temp%\blubbbox.js"
      cscript /nologo "%temp%\blubbbox.js"
      exit /b

machbar ist alles...

Natürlich ist das nur eine eine kleine Fingerübung und Eine MessageBox mit Batch auszugeben ist ohne Hilfe von JScript, VBScript oder anderen "Krücken" nicht möglich ...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  30.09.2019, 14:46

ps:

Erstes Update...🤣🤣🤑

Parser auf eine Ausführungszeile eingedampft!

@echo off
for /f "usebackq tokens=1*" %%a in ("Mein.blubb") do (
    echo %%a |findstr /i "blubbo blubbadd blubberbox" >nul &&(call :%%~a %%b)||(echo unbekannter Befehl: "%%a")
)
pause
exit /b


::Fall Behandlungs Subroutinen
:blubbo
echo:%*
exit /b

:blubbadd
set /a "_result=%1+%2"
echo %_result%
exit /b

:blubberbox
echo new ActiveXObject("wscript.shell").Popup ('%*',0,'BlubberBox',48)>"%temp%\blubbbox.js"
cscript /nologo "%temp%\blubbbox.js"
exit /b


1
Erzesel  30.09.2019, 16:46

Ich hatte noch etwas Zeit um mich mit der Kompatibilität zu Deiner Syntax? zu beschäftigen.

Im Prinzip das gleiche wie Oben, jedoch ist der Unterstrich der Delimiter, welcher den Befehl von den Daten trennt.

Ansonsten musste ich nur noch die Eckigen Klammern um die Parameter los werden... Sinn machen diese Irgendwie überhaupt nicht, aber ist Deine Sprache... und irgendwie ein unnützer Schritt... egal. so lernst Du gleich etwas Batch-For Artistik.

@echo off
for /f "usebackq tokens=1* delims=_" %%a in ("mein.casper") do (
    echo %%a |findstr /i "mtc out" >nul &&(call :%%~a %%b)||(echo unbekannter Befehl: "%%a")
)
pause
exit /b


:mtc
  rem Eckige Klammern entfernen
for /f "tokens=1 delims=[]" %%a in ("%*") do (
      rem runde Klammern für Echo innerhalb eines Anweisungsblocks maskieren! 
    echo new ActiveXObject^("wscript.shell"^).Popup ^('%%a',0,'BlubberBox',48^)>"%temp%\blubbbox.js"
    cscript /nologo "%temp%\blubbbox.js"
) 
exit /b
:out
for /f "tokens=1 delims=[]" %%a in ("%*") do (
    echo:%%~a
) 
exit /b

mein .casper ?

out_[  Hallo Welt!]
out_[ ]
mtc_[Hello World!]
mtc_[Miese Welt!]
mtc_[zu Faul zum Antworten...?]
out_[nochmal in die Console schreiben  !!!]
Hup
Palaver_[]
1

Schau Dir mal ClickEXE an.

Die haben so etwas ähnliches versucht.