Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
wnagy
Anmeldungsdatum: 19.04.2011 Beiträge: 5
|
Verfasst am: 20.04.2011, 08:59 Titel: FB/Tiger Basic |
|
|
Hallo,
ich muss immer wieder TigerBasic Programme erstellen.
http://de.wikipedia.org/wiki/Tiger-Basic
Die Steuerlogik ist meist "einfaches" Basic. TB Spezialitäten kann man mit einer Folge von #defines in den meisten Fällen 'hinkriegen'.
Zum Testen der Programmlogik ist FB einfach wesentlich konfortabler. Die Hardware-Teile kann/soll/muss man ja sowieso kapseln.
Hat sich jemand schon damit beschäftigt ich möchte gerne Erfahrungen austauschen.
\^/ili |
|
Nach oben |
|
 |
wnagy
Anmeldungsdatum: 19.04.2011 Beiträge: 5
|
Verfasst am: 24.04.2011, 15:17 Titel: |
|
|
Weiter Überlegungen:
Problem DIM:
FB: dim s as String
TB: String a
Ich habe mich ein bisschen mit #DEFINE gespielt. Leider keinen großen Erfolg gehabt. Die Variablen mit
Code: | #DEFINE FB
#IFDEF FB
dim s as String
#ELSE
String s
#ENDIF |
zu deklarieren scheint mir ein overkill
Irgedeine bessere Idee? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 24.04.2011, 15:56 Titel: |
|
|
Ich weiß nicht genau was du eigentlich vorhast, willst du TB in FB umwandeln, umgekehrt oder beides parallel laufen lassen? Erklär doch bitte mal dein Vorhaben genauer.
Zum Thema Deklarieren wäre sowas möglich:
Code: | #Define FreeBASIC
#Macro decl(typ, variable)
#If Defined(FreeBASIC)
Dim variable As typ
#ElseIf Defined(TigerBasic)
typ variable
#Else
#Print Sprache nicht bekannt
#EndIf
#EndMacro
decl(String, s) |
Der Code spuckt jetzt je nachdem was definiert wurde die richtige Deklaration aus, vorausgesetzt natürlich, der Präprozessor von TB funktioniert genauso. Alternativ einfach an FB mit Option -pp übergeben. FB löst dann die Präprozessor-Befehle auf, wird zwar dann einen Compilerfehler melden, aber den aufgelösten Code in eine Datei speichern. |
|
Nach oben |
|
 |
wnagy
Anmeldungsdatum: 19.04.2011 Beiträge: 5
|
Verfasst am: 24.04.2011, 18:58 Titel: |
|
|
DANKE! |
|
Nach oben |
|
 |
wnagy
Anmeldungsdatum: 19.04.2011 Beiträge: 5
|
Verfasst am: 24.04.2011, 19:12 Titel: Erklärung |
|
|
Ich schreib öffters für den Tiger Einplatinencomputer Programme. Diese haben verschiedene Aufgaben. Meist werden diese als Protokollumsetzer in Industriedrucker (Da wird auf Stahlrohre, Plastikteile, Auto Hinterachsen - aber nicht auf Papier) gedruckt. Der Druckcode besteht aus einer Steuersequenz sowas wien <stx>TMUTTERROHR<lf>11.222.3</etx> und wird in einem anderen Steuerkode umgewandelt. Dabei sind noch externe Schnittstellen usw zu beachten. Auch kommt es vor, dass der Input von verschiedenen Quellen kommt.
Kurz und gut ein elendigliches Gefummel auf den RS232 Schnittstellen.
Die Verarbeitungslogik ist, wie ihr sehen könnt manchmal ziemlich komplex.
Das ganze wird dann auf den Einplatinencomputer gespielt. Ein Übertrag dauert mehr als 60 Sekunden. Auf dem SBC befinden sich nur zwei RS232 das macht das debugging zu einem Ratespiel.
Ich schreibe den Hauptteil - ohne den Hardwarekram - in FB. Da kann ich dann Unittest usw. machen. Danach übertrage ich den Code in TB.
Es gibt kleine aber entscheidende Unterschiede im Syntax.
So wie es mir im Augenblick scheint gibt es zwei Methoden.
Ein Gefummel mit #DEFINEs oder eine Umwandlungsprogramm, welches das File von .BAS in .TIG umwandelt. |
|
Nach oben |
|
 |
MilkFreeze

Anmeldungsdatum: 22.04.2011 Beiträge: 116
|
Verfasst am: 24.04.2011, 19:35 Titel: Re: Erklärung |
|
|
wnagy hat Folgendes geschrieben: | Ich schreibe den Hauptteil - ohne den Hardwarekram - in FB. Da kann ich dann Unittest usw. machen. Danach übertrage ich den Code in TB.
Es gibt kleine aber entscheidende Unterschiede im Syntax.
So wie es mir im Augenblick scheint gibt es zwei Methoden.
Ein Gefummel mit #DEFINEs oder eine Umwandlungsprogramm, welches das File von .BAS in .TIG umwandelt. |
Das "Gefummel mit den #DEFINEs" dürfte weniger Aufwändig sein, als ein programm zu schreiben das dir FB-Code übersetzt. Für einen Übersetzer müsstest du einen Parser schreiben, dann die Befehle zerlegen und in der richtigen Syntax wieder zusammen schrauben. Die DEFINE-Lösung dürfte weniger Zeitaufwändig sein.
Ich weiß natürlich nicht wie groß die Unterschiede sind. Wenn die Unterschiede zu groß sind, wirst du mit der DEFINE-Lösung nicht sehr weit kommen...
ich hoffe ich konnte dir weiterhelfen. _________________ Milch ftw  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 24.04.2011, 20:37 Titel: |
|
|
Der Unterschied ist, dass du das "#DEFINE-Gefummle" immer wieder aufs neue machen musst, den Umwandler aber nur einmal. Muss doch auch kein Parser sein. Für "DIM AS STRING variable" -> "STRING variable" z. B. reicht ein ganz einfaches suchen+ersetzen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
MilkFreeze

Anmeldungsdatum: 22.04.2011 Beiträge: 116
|
Verfasst am: 24.04.2011, 23:04 Titel: |
|
|
nemored hat Folgendes geschrieben: | Der Unterschied ist, dass du das "#DEFINE-Gefummle" immer wieder aufs neue machen musst, den Umwandler aber nur einmal. Muss doch auch kein Parser sein. Für "DIM AS STRING variable" -> "STRING variable" z. B. reicht ein ganz einfaches suchen+ersetzen. |
Stimmt nicht so ganz. Er könnt das "#DEFINE-Gefummle" auch in eine .bi-Datei verlagern und müsste so das ganze nur einmal machen (bei jedem weiterem Code nur das Include setzen und fertig). _________________ Milch ftw  |
|
Nach oben |
|
 |
wnagy
Anmeldungsdatum: 19.04.2011 Beiträge: 5
|
Verfasst am: 25.04.2011, 20:24 Titel: |
|
|
Danke für die Vorschläge.
Es geht nich allein um die defines es müssen noch andere Änderungen vorgenommen werden.
z.B.
select case x
case ...
durch switch x
case
Ein vollständiges Parsen und erstzen ist nicht unbedingt notwendig. Ich denke, dass ich mit RegEx auskomme.
Es muss ja nicht unbedingt eine 100% Übersetzung sein.
Danke jedenfalls...
\^/ili |
|
Nach oben |
|
 |
|