Syntax bei Funktionsaufrufen
Übersicht BlitzBasic Allgemein
Spark FountainBetreff: Syntax bei Funktionsaufrufen |
Do, Jul 14, 2016 0:26 Antworten mit Zitat |
|
---|---|---|
Heyho,
ich hab schon mehrmals versucht eine eigene IDE für BlitzBasic incl. 3D und evtl. auch für BlitzMax zu programmieren. Grad versuche ich eine IDE mit JavaScript zu basteln, für die ich Ace benutzen will. Ace scheint ziemlich gut zu sein und bietet die Möglichkeit, eine Art eigene Syntaxbäume zu definieren, sodass Highlighting und sogar syntaktische Fehlererkennung möglich sind. Jetzt komm ich auf den Punkt: Bei BlitzBasic hab ich festgestellt, dass man manche Funktionen sowohl mit parameter-umschließenden Klammern, als auch ohne diese schreiben kann. Zum Beispiel: BlitzBasic: [AUSKLAPPEN] Graphics 1024,768 ;klappt ohne Klammerung Dann gibt es aber wieder Funktionen, bei denen es verpflichtend zu sein scheint, die Klammern mit anzugeben: BlitzBasic: [AUSKLAPPEN] SetBuffer BackBuffer ;klappt nicht -> Buffer wird nicht erkannt Und wieder andere, die für mich zumindest wie "Funktionen" aussehen, aber keine Klammerung akzeptieren: BlitzBasic: [AUSKLAPPEN] Include "test.bb" ;klappt Kann mir vielleicht jemand erklären, was die Unterschiede zwischen diesen Funktionsaufrufen sind? Damit ich meine IDE korrekt bauen kann, will ich gerne für jeden Befehl alle möglichen Schreibvarianten zulassen, ohne dass vermeintliche Syntaxfehler angezeigt werden. Soll heißen, im obersten Beispiele sollen beide Schreibweisen zugelassen werden, während im zweiten und dritten Beispiel die falschen Aufrufe erkannt werden sollten. Gibt es darüber hinaus eine Möglichkeit (abgesehen davon, jedes Kommando mit und ohne Klammern zu testen) herauszufinden, welche Befehle Klammern akzeptieren und welche nicht bzw. nur mit Klammern funktionieren? Vielen Dank für's Lesen bis hier unten, ich bin gespannt auf eure Tipps! |
||
Gewinner der MiniBCC's #11, #13 und #28 |
DAK |
Do, Jul 14, 2016 0:34 Antworten mit Zitat |
|
---|---|---|
Ok, mal das Einfache als erstes: Include ist keine Funktion, sondern ein Keyword (wie z.B. For) und akzeptiert nie eine Klammer (ist einfach was Besonderes).
Funktionen, deren Return-Wert du haben willst, brauchen immer die Klammern. Funktionen, deren Return-Wert du ignorierst, brauchen die Klammer nicht. Ansonsten wäre die Syntax nicht eindeutig. Beispiel: BlitzBasic: [AUSKLAPPEN] Function a(x=4,y=1) In diesem Fall ist es nicht klar, ob die 7 als y-Wert von A oder als x-Wert von B genommen werden soll. Deswegen: wird der Return-Wert einer Funktion verwendet (als Parameter für eine andere Funktion oder in einer Zuweisung an eine Variable) müssen Klammern hin. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Spark Fountain |
Do, Jul 14, 2016 11:06 Antworten mit Zitat |
|
---|---|---|
Danke für die schnelle Antwort! Ich dachte mir schon sowas in der Art, dass es mit den Rückgabewerten zu tun hat und dass Include und For etc. Sonderfälle sind.
Allerdings wird es dadurch sicherlich schwierig für eine IDE zu unterscheiden, wann Klammern notwendig sind und wann nicht, weil es immer kontextabhängig ist... Aber im Zweifelsfall kann ich auch darauf verzichten, dass benötigte Klammern gehighlighted werden. Der Compiler wird sowieso meckern |
||
Gewinner der MiniBCC's #11, #13 und #28 |
DAK |
Di, Jul 19, 2016 17:47 Antworten mit Zitat |
|
---|---|---|
Das sollte eigentlich gehen. Eine Funktion, die keine Klammern verwendet, muss als Erstes in der Zeile stehen (mit Ausnahme von Whitespace davor).
BlitzBasic: [AUSKLAPPEN] f ;gültig Wegen dem letzten Punkt: man kann eine Variable haben, die den gleichen Namen haben, wie Funktionen. z.B.: BlitzBasic: [AUSKLAPPEN] Print(MilliSecs()) ; Gibt die aktuelle Uptime in ms zurück Also im Grunde: Ein Funktionsaufruf ist definiert als -) Ein Identifier, dann "(", dann beliebig viele Parameter getrennt mit ",", dann ein ")" oder -) Ein Identifier am Beginn der Zeile, nicht gefolgt von einem "=", schon gefolgt von beliebig vielen Parametern getrennt mit "," |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group