Archief - C++/Qt input string naar code omzetten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

rubenvb

Legacy Member
Is het op de een of de andere manier mogelijk om een input string (van bv de command line of een QlineEdit rechtstreek in de code te plakken (at runtime, wel te verstaan). Ik probeer een manier uit te vissen om een willekeurige wiskundige formule (+-*/, sin, cos, exp,...) om te zetten naar een in het programma werkbare vorm.

Een simpele testcase de methode te gaan testen:
-programma vraagt formule (stel dat x altijd de variabele MOET voorstellen)
-gebruiker geeft in c++ stijl bv in: 5*sin(exp(x/9))-3 (voorlopig moet het maar de gebruiker z'n verantwoordelijkheid zijn om te zien dat deze klopt)
-programma vraagt x-waarde, gebruiker geeft dit in
-programma laat het resultaat zien.

Ik hoop gewoon een parser te vermijden, want weet echt niet hoe ik daaraan moet beginnen. Bedankt!

Parnakra

Legacy Member
Je zal sowieso een (zelfgeschreven) parser nodig hebben om de verkregen string te overlopen en te zien welke tekens getallen zijn, welke bewerkingen en welke functies. (en dan nog eens rekening houden met volgorde van bewerkingen)

/edit: een snelle google levert dit op.

Cycloon

Legacy Member
In de meeste andere talen zou je iets hebben als een eval() functie maar in c++ is dat niet mogelijk. Een parser maken of ergens zoeken is de enigste oplossing :). Een parser hiervoor schrijven is ook niet zo moeilijk eigenlijk.

rubenvb

Legacy Member
@Parnakra: dat ziet er heel handig uit. Bedankt, was ik niet met mijn Google search tegengekomen :s

Bedankt allebei.

PS: mijn matlab functie fitter omzetten naar Qt gaat nog veel werk kosten, ik zie het nu al:scream::oink:

rubenvb

Legacy Member
Even m'n eigen thread hijacken :)

Ik probeer die muParser te gebruiken in mijn "solution" in VS2008. Ik heb dus:
Solution: Fitter
-Projects: Parser, Fitter, Tester, Plotter (enkel parser en tester zijn van belang :))

Ik heb twee dingen geprobeerd, maar ze lukten allebei NIET:
1) Parser->configuration properties->general->configuration type: dll
dit samen met Tester->common Properties->add reference naar die parser.dll
en ook nog een Tester->configuration properties->C/C++->general->additional include dirs->$(SolutionDir)\Parser (waar dus de headers ook staan binnen het geheel)
Nu heb ik ook nog een Tester->configuration properties->Linker->additional library directories en dat gezet op "$(SolutionDir)\x64\Debug" waar dus naar gebuild wordt.
Met deze config krijg ik de volgende error:
1>LINK : fatal error LNK1104: cannot open file '..\x64\debug\parser.lib'

Waarom zoekt ie naar een .lib als er in de reference duidelijk een dll staat :s
--------------------------------
2) Parser->configuration properties->general->configuration type: static lib
dit samen met Tester->common Properties->add reference naar die parser.lib
en ook nog een Tester->configuration properties->C/C++->general->additional include dirs->$(SolutionDir)\Parser (waar dus de headers ook staan binnen het geheel)
ik heb eens geprobeerd om met en zonder de bij 1) gebruikte linker dir te gebruiken, maar ik krijg telkens dezelfde error:
(eerst een hoop lnk2019: unresolved external symbol....)
LNK:1120: 29 unresolved external symbols

Dit heeft ook te maken met het niet juist vinden van de gebruike lib, juist?
--------------------------

Ik weet het echt niet meer. Het enige dat ik nu nog kan doen, is de muParser code in het hoofdprogramma steken en alles in 1 exe proppen. Maar dat zou ik liever toch niet zien gebeuren :s

Any help is appreciated, as always!

Messias.

Legacy Member
Parnakra zei:
Je zal sowieso een (zelfgeschreven) parser nodig hebben om de verkregen string te overlopen en te zien welke tekens getallen zijn, welke bewerkingen en welke functies. (en dan nog eens rekening houden met volgorde van bewerkingen)

/edit: een snelle google levert dit op.

Boost.Spirit Home

Dan vertrouw ik toch eerder de parser libs van een gerenommeerd open source project dan de code van een dubieuze site als codeproject.com. Anderzijds is het misschien compleet overkill en is het ook nodig om zelf je grammar te schrijven.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan