[Playlisten] [Impressum und Datenschutzerklärung]

13A.3 Parsen und Auswerten von arithmetischen Ausdrücken, Implementierung


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

alsodiese Sprache hiersind arithmetische Ausdrücke richtig geklammertmöchte ichdich programmierenund auch auswerten also nicht die Grammatik prüfen sondern auch tatsächlich dann ausrichtenwas passiertwenn jemand mirdiese Zeichenkette gibt was kommt raus eins plus zwei ausrechnen plus drei aus Einfluss vierund damit mal mitgeteiltPunktam einfachsten ist ?? hier mit der Zahl anfängtich muss in so einer Zeichenketteeine Zahl wieder erkennen einem mehr zittrigenZweifelsfallZahl wieder erkennendie endetwenn es erste Zeichen kommt was keine Ziffer istjemandgibt mirZeichenkettemach ich mal tatsächlich globales wenig hübsches an dieser Stelleist man am einfachsten ist jeder gibt mir jemand gibt mir eine Zeichenkette mit einer Zahl drinund am Ende der Zahlsteht irgend ein anderes Zeichenwas offensichtlich nicht mehr zu einer Zahl gehörtzumindest das einlesen ganz verwirrt anderenNamen geben Leerzeichen geht in den Besitz der ?? das sollte Text sein dereingelesenwerden sollund ich hätte gerne eine Funktiondie eine Zahl liestwelche Normannen ich jetzt malamdie soll sich diese Zahl dann zurückgebensolleine Zahl lesenund dann zurückgebensollte und nimm ?? Programme tatsächlich aufgerufen werden ?? numberund ich möchte wissen was dabei rausgekommenist?? gleichdas soll sinnvollerweise gleich vier in dreißig tausend fünf hundertdreißig sein will ich mit ihm arbeite vielleicht doch lieber nur ein dreißig tausend soich möchte mir merken an welcher Stelleich gerade arbeiteinzwischen ich das malauch über globale Variablen was nicht schön ist aber zur Stelle am einfachstendieseFunktion soll durch diese Zeichenkette durchgehensich merkenwo Feierabend war bei dem Sternchenund mir als Rückgabewertdie Einreise tausend fünf hundert vierunddreißigliefernich?? sowas angenau Schritt für Schritt durchgehen das heißt sie brauchen eine Schleifegucken welche Schleife in der Schleifekann man schon malwerden sie sich das Zeichen an der aktuellen Stelle holenTraditionund guckenmal so C gleichzu ?? und gucken ob das jetzt eine Ziffer ist oder nicht hilf ich oft erstdannistdie Symbolnummergrößer gleich der Symbolnummerfür die nullund ist dieses Symbol Nummer kleiner gleich der Symbolnummerfür die neuen dann ist es eine Zifferund ich muss darauf reagierenirgendwie sinnvollansonsten ist es kein Zifferund ich muss mir irgendwie merken dass ichfertig binmit meiner Zahlso sieht bisher auswas sollte das für eine SchleifeseinschöneAntwort bei der while-Schleife sagen sie so lange wie das aktuelle Ding immer noch Ziffer ist bei der for-Schleife ist sie gar nicht ?? Anfang?? man könnte natürlich entsetzliche Männer for-Schleife auch durchgehend von null bis und die Abbruchbedingungist dannnicht fest also wäre nichtvon ihm die gleich null bis zehn oder was sollen die Abbruchbedingungwäredas aktuelle Zeichenist eine Zifferkönne der Vorschlag ja was anders testenals die kleiner zehntesten und dann darauf könnte man machen aber in der Tat die Waldschleife finde ich hiernahe liegender solangeja solange das aktuelle Zeichen noch okay ist solange wir noch nicht fertig sinddas einfachste nur noch gar nicht wissen was er machen können?? Weinert dannund für eine gute Variable dann einund damit wir tatsächlich Leinengehen Sangriafoulsund damit die gute Variablegehtwohl haben und fortan auch nur nochin Cloudin CloudStandardpoolPunktsomuss man sich überlegen wann ist man denn dann wann ist man denn fertigdamit diese Zahl zusammen zu bauenwenn das danngetanerledigtwenn das dann war wird die Arbeit ist getan ist das nicht dann falschund die while-Schleife endet dann die weiße Schleife läuft er so langewie die Bedingung wahr ist ?? der Bezeichnung entspricht desAnwendersgetandannwarf jetzt endet die Wahlschlappe muss jetzt in der Warteschleife das dann an irgendeiner Stelle aufzusetzenund zu sagen jetzt ist Bayer mit der while-Schleife wann setzen sie das dannauf tunin der ?? im Els setzen sie das dann auf zwodenn dannhabe ich ein anderes Zeichen als null bis neunwurde mir das nächste Zeichen gucke ob es zwischennull und neun einschließlichliegtwenn ja alles in Ordnung wenn es aber nicht nur bis neun ist heißt das meine Zahl ist vorbeiund wir sind fertigmit der Schleife?? ich muss jetzt noch weiter schreitensollte hiernachdem ich das Zeichen geholt haben müssen funktioniert sollte ich in der Position als weitergehenbei dem dann gehe ich nicht in der Position ein zweiterwenn es dann Wahl wird für das aktuelle Zeichen nicht zur Zahlbleibt dann hier nachher bei dem Sternchen steht und jemand anderesin der Nanofunktionmuss dann mit dem Sternchen weitermachen ?? ich machejedes des erhöhter Position nur in dem ich wenn's geklappt hat aber nicht wenn es falsch gewesen istjetztmüsste ich mir noch merkendas Tender überhauptvorgekommenist Anzahl ich muss meine Zahl irgendwie zusammen sortierenfolgenden Trick ist es meiner ?? Zahl ist gleichnullPunktwie kann ich jetzt meine Zahl zusammen sammeln dieses Ziel steht für irgend eine Ziffer die erste Ziffer die zweite Ziffer in der Reihenfolgewie kann ich jetzt die richtige Zahl daraus berechnen das hier muss er nachherauf der Maschinen sechzehn Bit dass sie müssen die sechzehn Bits werdenPCs sind einzelne Buchstabenwie sortieren Sie die zusammen zu einer echten Zahlschlecht in der Tat also wenn da aus dem vorherigen Durchgangkann das schon zusammengesammelt fünfundvierzigHammers gemerkt aus dem vorherigen Durchgang und jetzt kommt noch die Zahl sechsals dass sie nehme die fünfundvierzigaus dem vorherigen Durchgangmal zehndie andere zu schieben plus die sechsalso das was wir bisher hatten mal zehndie neue Zahldie alten Ziffern nach links schieben und die neue dazu addieren das was hier passierenhabenSA die Zahl ?? zum Schluss draus wird soll also werdendie alte Zahlum eine Dezimalstellenach links geschobenplusdie neue Zahldabei der Trick jetzt dieses C ist ja dieNummer des Symbolsgestreckte Zahl von null bis neun Sonne die Nummer des Symbols ich sagewas ich addiere ist sie minus diesem Nummer des Symbols null?? in der Formwenn siedie Nummer des Symbolsnull iststeht hinten nullwenn C die Nummer des Symbols eins ist es eins mehr als die Nummer des Symbols null entsteht eins und so weiter das ist das billiger Trick um ?? zu machensoweit dasganz am Ende sind das diese Funktion soll ja meine Zahl einsammelnund danndas was es eingesammelt hat zurückgeben Returnwareine Sache habe ich aber jetzt noch nicht eingebaut aus meiner Regelnämlichnicht Komma siedieseSache hieres muss mindestens eine Ziffer seindas darf nicht sofort aufhören ich muss mindestens eine Ziffer haben das es hier nicht eingebautwenn daserste Zeichen was sie findensofort keine Ziffer istes das beendet und sie geben null zurückBeistrich hundertprozentig meine Regelwie kann ich erzwingendass er mindestensein hundert Ziffer sehen mussderin der Tat müsse gucken ob ich in den if mindestens einmal ankommtwerden zwei Vorschläge waren einmalmitzählen wie häufig herankommtoder sich persischen anguckenals die persischen?? geändert hat dann scheint was passiert zu sein sonst nicht anich würde noch ?? dritte Lösungnehmenich für dich mitzählen ?? häufig ?? durchgekommen ?? ich möchte nur wissen ob er einmal durchgekommen ist das heiß ich merke Männerburschenvariable ob er einmaldurchlässig gekommen ist der obenamEnde nicht dasirgendwie ganz ungeschickt Gott erschließt und berührtwirdund dass es endlich erst mal falschweil ich noch keins gesehen habediese Wut variabel soll mir sagenich denn ein Ziffer mindestens gesehen habe und wenn ich eine Ziffer gesehen habe sind sich die auf war?? zweite sehe der sich die wieder auf Weigeram Endedes Tages sagt mir diese Variable ob ich mindestens eine Ziffer gesehen habedas kann ich hier verwendenwenn ich nicht mindestens eine Ziffer gesehen habeda was falschunddas merke ich mir einfachnochetwasunschöne Lösungaber das muss erst mal so ich lege noch ?? gute Variable an namens ErrorgesetzlicherBeistrich Erfolgsauf was sie sowieso automatisch gesetzt würde hier als statische Variablenrahmenwenn das nicht hingehauen hatmit den Ziffern wenn keine einzige Ziffer gekommen ist dann sage ich Error ist gleichdu?? auf diese Weise gemerkt das was schief gegangen istunddann bitte einfach nur zurücksendestaatlicheoben mit nullmerkt sich Tops vermerkt sich das was falsch gewesen ist und gibtnull zurück was sollte man das jetzt tatsächlich mal in Aktion sehenhieroben steht für eine Zahl als ich für die es tatsächlich hoffen dass er drei eins fünf drei einsammeltdie Position sollte dann bei eins zwei drei vierfünfDollar Zweifel fünf die Position sollte auf fünf stehenund es sollte kein Fehler gebenokayich bin verfolgt von Javadie eckigen Klammern gehören natürlich?? sie hinter die Variablesojetzt einen Schrittweiterwarund die Optimierung ausschalten das man dann auch nach getaner Arbeit die Variablen auslesen kanndas sieht gut aus einer sich fünf drei vier sind lediglich die sechzehn Bits die diese Maschine der Abschnitt vor was die Zeichenkette drei eins fünf drei vier Sternchenund jetzt sind die sechzehn Bit da ich umgesetzt als ZahlPunkt was doch malbei uns der Text nach russischen steht auf fünf das heißt es wirklich durchgelaufensoweitläuft diese eine Routine schonandas ?? sogar der schwierigste Teil des Ganzen die Zahlen herauszufindenKomma was nächstes mal versucheneinen Ausdruck zu zerlegenschreibt Waldmeister irgend ein Ausdruck hin von der Art der Minen vorschwebt zwölf plus vierunddreißigmalKlammernplusKlammern??irgendwas teilenBeistrichwas weiß ich ??und ein zwei dreißig oder so dieser Ausdruck ist durch eine Nummer heftiger das heißt aber euch die anderen Regeln auch allein meiner Hauptfunktionmöchte ich jetzt nicht mehr sagen über number sonderndas ganze soll ein Ausdruck sein ?? Value Express schonund muss mir also überlegenokay wie geht denn das jetzt mit der Welt Beistrichirgendwo wird eventuell Experten auf die Zahl zurückgreifenmüssen dich gerade hatteichso ansehenmögenwenn sich das hier anguckenweil Expansion soll den nächsten Ausdruck die nächste sprechen holen und sagen wie viel das denn ist den als Zahlenwert zurück liefernden sie eine Chance dieses Diagramm hin bisschen einfacher zu machen der Ärger ist nämlichich muss mich ja für einen dieser Zweige entscheiden fahr ichnördlich oder Fake südlichund am Anfang weiß ich nicht genau welchen Weg ich einschlagen muss beide fangen hiermit aber Rand ansie ??Jones dieses Diagramm etwas anders zumales ist der Trick hier am Anfang kann ich diese Entscheidung nicht machen gezieltem Operanden los im NordenBrand im Süden los wenn ich immer die nächsten Zeichen angucke stehe ich auf dem Schlauchdannstreiche den daraus und mache die Verzweigungdahinterich wohne in jedem Fall einen Operandenund dann gucke ichobals er auf ein Operator kommtoder ob ich schon fertig bin so funktioniert das ich wohl erstmals ein Operanden damit ?? ich dasselbe ausgedrücktist aber freundlicherdann zu programmierenals eventuelle ?? sprechen wir damit anfangen dass ichein Operanden hohlenangebenwelche Mailsvon unsGolansind aufdem auch jetzt also weil ihr gegenseitig auf sich verweisen diese Regelnmuss ichbeide irgendwie gleichzeitig bauen es ist bisschen geschicktich deklariere die Funktionwelche Doppelrandist der Compiler nicht meckert hiersollalso auch wieder ein in den Charts zurück liefernund soll nichts nehmenund dann kann der Compiler damit lebendamit weiß der Komma dass es eher kein Aufruf sondern nurfür den dummen C-Compiler der Hinweis wie diese Funktion von außen aussieht nimmt nicht gibt ?? ganze Zahl zurück damit kann der C-Compiler jetzt dasBauenauch wenn ich noch gar nicht weiß wie reagiert auf ?? tatsächlich funktioniertalso ich wohne mir erst mal den Operanden ganz zu Beginnwo ist der hier den Operanden hole ich mir in jedem Fall und jetzt muss sichverzweigenentweder kommt ein Operatoroder nichtwasmuss also als nächstes jetzt passierengucken was dahinter kommt ja das heißtich wohl erst einfach maldas nächste Zeichenwas kommt denn tatsächlich der hinter Text hieß dasunterstehtdannversuchenauchdiese Funktionwerde davon zu einfach immer mitführen an welcher Position sie gerade liestund versichern soll also auf das erste Zeichen nach dem Operandenzeigen was da gerade eingelesen worden istsowennichda schon fertig bin mit der Zeichenkettedie gesamte Zeichenkette soll ja nach ein Ausdruck werdenes kann sein das ich an dieser Stelle fertig bin mit der Zeichenkettewenn ich fertig bin mit der Zeichenkette gebe ich einfachA zurückdiesen Operanden den ich daeingesammelt habewenn ich nicht fertig bin mit der Zeichenkettejetztmüssen schwieriger das hängt jetzt davon abwas daeingesammelt worden ist je nachdemvon der je nachdem welcher Operatordas warSchweifklammer befindet je nachdem welche Operator das warmuss ich verschieden reagierenichbin hier auf der Position des Apparates hat den Wasseroperatoreingelesenletztlich noch eine Position weitersich das Diagramm angucken wenn ich eine Position weitergehe dann muss ich in der Lage sei den Operanden den zweiten Operanden einzulesen?? das rufe ich jetzt einfach aufden zweiten Operandenwiewenn da was schief geht ist das ob dieser Funktionfestzustellen ob da was schief gegangen Punkt aber hier gehe ich jetzt davon aus okay ich habe einen ersten Operandenich weiß welchesich aber zu und dazwischen stetig und in zweiten Operandendas muss ich noch auswerten welche Operation das warwas schreiben Sie jetzt in das Switchschreibenwirklich ein Ergebnis zu bestimmenauf sowas schreiben denn es wird schreienjetzt wirklich gerechnet wirdfang erst mal an zu sagen dieses Zieles zeichnen sich gut aber wenn das ein Plus ist also okay ist das Seewasser geholt worden ist die Nummer des Zeichens plus istdann möchte ichdie Summe ausrechnenwovonund die zurückgebenwas passiert in diesem Casedie zwei Sachen addieren und zwar A und Baber was vor dem Operator standin der ?? überrannthat den Job genau das auszurechnenwas vor dem Operator steht und danach steht Babsurderweise gebe ich jetzt einfach A plus B zurücksie sind ich das dann delegiert habe diese Funktion basiert auf ?? unddie hat plötzlichgewisse Lastern Arbeit gekriegt diese funktioniert total billig ist doch wohl das was vor demPlus Minus Fragezeichen steht wohl das was danach steht und was der Wert hier ist Windows in der Mitte steht die Summe und so geht das jetzt mit den anderen weiteres lustig unser komplettes Problem dannin daskleine billige Teile der Spalten Advent ein Minus steht gibt es minus wenn dann mal stehtgibt das mal und wenn dann geteilt steht gibt es geteilteHolz eine noch aufteilen durch null und so weiter achten müssen abersei's drumund es kann sein das einfachen Fehler passiert ist das zwischenden Zahlen sonst versteht aber keine Operationganz natürlich falschstaatliche Defaultansonstenin keiner von diesen Fällen passiertansonsten sage ich wieder ob es was falsch gelaufen ich merke mir das in dieser Fehler Variableund gebenull zurückin was müssen wir zurückgebenKomma Fahrzeit aber nur zurücksodas wir absurderweisealleszu diesem Thema eventuell Expertenan sie nur gesehen Werbetextwäschekann ich nicht programmierenohne welche Turbulenz die beiden verweisen aufeinander ich brauch aus der Zelle jetzt auch noch ?? undamdas heißt hier werde ich jetzt danach malopulentbauen müssenund dass ihr sie soll man ?? sagen Switchalsowenn es ein Plus wage ich hier sofort aus der Funktion zurück mit dem Returnnormalerweisehaben sie beim Switch dann immer noch ein Beleg dahinterund dafür zu sorgen dass er nicht mit dem nächsten Case weitermachenaber wenn ich sowieso die Funktion beende eine Stelle Punkt das prägt nichtund lange drüber diskutieren kann ist das überhaupt gut mitten so rauszugehen ich finde an dieser Stelle gut weil es das ganze übersichtlicher machteine längeren Funktion würde ich mir das auch überlegen ob ich hier zwischendurchin ein Case eine Turnschreibweiseund übersichtliche Funktion jaso?? nochzwei Minuten für welche opulentLustigerweiseist das auch wieder ganz simpel Klammer zu weiter schlagen hatte sie beim Weltapparathaben sie nurin Fall es ist eine Zahloder es fängt mit einer Klammer an ich prüfe als Opfern eine Klammer steht sinnvoll eine Klammer steht weiß ich den und wenn ich im unterenich sammel ein Ausdruck ein prüf auf eine Klammer dasteht und bin fertig in einem Fall sammelte Zahldas ist dann schon allesich wurde mir das aktuell angesagteZeichenschatzwieaus meinerPositionauch hier nochwiewohl das aktuelle Zeichen nicht gucke ob das aktuelle ZeicheneineKlammer istmitder einfachen Anführungszeichenist das Klammer auf sind es sieht wirklich komisch ausC wird verglichen mit der Nummer des Symbols Klammer aufdas steht in diesenbeiden Runden Klammer zu wenn das eine Klammer aufist heißt dasdanachdanachstehtein Ausdruck?? ich sammle also den Ausdruck eindurchgehender Position ein zweiter Wolken die Klammer eingelesen habe Positionzweiterund sammle meinen Ausdruck einder in der Stimmung zu dahinterstehenmussPunktschonunddann prüfe ich ob dahinterdenn jetzt auch die Klammer zu stehtnämlich nicht Klammer zu dahinter stehtist da schief gegangenist die Klammer zu Dahinterwenn ja kichernd weiter mit der PositionKlammer zueingelesen habeund bin fertigich gebe einfach dieses A zurückden Wert von dem Ausdruck zwischendrin den ich geholt habeweder keineKlammer zu stand weiß ich es diesen Fehler aufgetretendennin dieser Situation muss hinten eine Klammer zu stehen es gar nicht anders verstehenalso merke ich mir es ist ein Fehler aufgetretenist gleich tunundgeben nur zurückso das ist die eine Variantees steht eine Klammer als erstesin Anklam als erste stetssonnig die Klammer einvergesse die Klammer danndann ohne die Werte des Ausdrucks und Programme Klammer zuzu dahinter steht wenn er keine Klammer vorne steht damit aber sofort der Zahl ein?? auch schonals ich ihreine Klammer steht Els es steht keine Klammerdann sammle ich eine Zahl einTurnsofort fertige Valueelsnumbereine Zahl eingesammeltgibt's nur die allerletzte Geschichte sind das müsste jetzt komplett seine Tipps die allerletzte Geschichtewennich meinen Ausdruck eingesammelt habe könnte es ja passieren dass sie hinter nochirgendein Blödsinn stehtdas möchte ich auch noch als Fehler werdenhier möchte ich guckenob ich tatsächlich am Ende der ZeichenkettewennFragenstehe ich jetzt wirklich auf derenNullam Ende der Zeichenkette steht ja eine nullbin ich am Ende der Zeichenkette und wenn jaist alles in Ordnung wenn nichtsstehend steht keine neue wenn nicht herrlichen Tanzproblemauch ein FehlerausgleichenPunktso ?? und um eine Idee zu kriegen ob das funktioniert werde ich diese selbe Zahl hier obeneinmal auch in eine Variable einsteckenwiehier macht es jetzt der Compilerdas sich hier als Sprache definiert habe ist auch Teil von Chier lass ich jetzt den Compiler rechnenzum Vergleich mal?? und hier obenhabe ich eine Zeichenkette hergenommendie Zeichenkette kann doch leicht eingegeben seinkönnte eine Benutzereingabeseien die Fragen dem Benutzer gekümmert oder Zeichenkette den Taschenrechnerimmer dann interaktiv bedienen kanndas es nicht fest ein kompilierte Zeichenkettedie wird jetzt zur Laufzeit des Programms auseinandergenommenund dazu Fluss den Wert Adas hier unten istwenn ich den Compiler bitte dasselbe mal zu tun ?? kann ich nur vergleichen ob das was sinnvolles ist und ??Return alleine reicht nichtwenn ich ein Fehler haben möchte ich Null zurück ebenso dafür dritter nullwäre Doppelpunkt wenn ein Fehler da es richtignull zurückgebenzuBrusthaarlockegutwas faulsind ein Wortmeist aus einem Grundsockeldiese Variable B wird nicht benutzt das ist okaynur habe ich hier oben jetzt ein Jahres Konzertnummernlaufzu gucken was hier passiertsetzte man weg Punktgerade weil was passiertdann??ich sah gewährte den Ausdruck ausgenommen rein in werde den Ausdruck auswärts oder den ersten Teil Ausdruck wohlguckenwas sagt er null das kommt nicht gutder erste Teil Ausdruck hier sollte nicht null sein das ist falschähmich ?? meine Welt wird auf ?? und rein gucken müssenvon vorne anso bin ?? Developer Express schon reingehenin den auch mal rein Kinder kann ich mir was falsches raus also ihr Eingehen in?? underholt sich das erste Zeichen davondas ist eine Klammer aufdass es richtig hier Klammer aufunsgeht dann zum nächsten Zeichenund soll jetztden Ausdruck auswertender danach kommtimmerdas übliche mal das ehrlich weitergehen mal sehen ??sechsten vierzig das aber gar nicht so falsch?? zwölf und vierunddreißig das hat Funktionär die sechsten vierzig haben funktioniertsoferneuch ?? Vertrauengewonnen in meine Funktion übermütig sprechen bin ich sicher sie fusionierte ?? Vertrauen gewonnenjetzt prüfe ich auf hinteneine Klammer zustehtsiesteht nichtsdas ist ein schlechtes Zeichen das heißt wahrscheinlichist sie variabel Beistrich nicht weiter gestellt worden russischen steht jetzt auf sechsrussischen steht auf sechsnull eins zwei drei vier fünfsechsbittet mich geradeda muss ?? Klammer zu stehensehen was ich machen müsste ?? soll dir nicht C vergleichenich muss das neue Zeichen hoherdie alte Variable C in der ?? Klammer zu stehtdas natürlich nicht C sondern hier muss ich noch mal wieder nachgucken das war der Fehleralso hier brauche ich Ihnenden Text an der neuen Positionsound nicht das was davor mal gestanden hat?? dort ??herausArsorgt vier hundert vierzehnB sagthundert vierzehndas müsste man jetzt natürlich wieder mit sich werdensehr