Gezocht: eenvoudige script interpreter met C# support

Pagina: 1
Acties:

Onderwerpen


  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 21:08
Zoals de titel het zegt, ben ik dus op zoek naar een eenvoudige scripttaal die geïntegreerd kan worden in mijn C# programma. Met eenvoudig bedoel ik de syntax die zo simpel mogelijk dient te zijn. Wat de interpreter van die taal moet kunnen, is misschien niet zo eenvoudig ;) Maar laat ik eerst even schetsen waar ik mee bezig ben en wat de bedoeling is...

Eerst en vooral, ik beschouw mezelf als geen supergoede programmeur. Nu dat van de baan is, kunnen we verder. :P Ik ben een C# programma aan het schrijven die communiceert met een controllerboard via de seriële poort. Dit alles werkt behoorlijk goed, het C# programma stuurt een bepaalde reeks commando's en die worden netjes uitgevoerd. Het controllerboard (met in- en outputs) zal in veel gevallen dezelfde sequentie moeten uitvoeren maar soms zal er toch eens iets anders geprobeerd worden. En daar wringt het schoentje. Dit programma zal namelijk niet alleen door mij gebruikt worden maar ook door enkele collega's. Hoewel ik hen gerust de brondcode wil bezorgen, hebben de meesten geen ervaring met het programmeren in C#. Het zijn geen programmeurs, het zijn ingenieurs die bepaalde acties willen uitvoeren (met het controllerboard) en de gegevens afkomstig van het board moeten kunnen verwerken. Ik heb al zitten spelen met de .NET CodeDOM en het is mij al gelukt om een lijstje met acties die in een textbox staan met een druk op te knop te laten uitvoeren. Alhoewel ik zaken als de references, namespace, class, ... automatisch aan het programma in de textbox kleef, moet je nog steeds een kennis van de C# syntax hebben om bepaalde zaken uit te voeren. Er wordt ook gebruikt gemaakt van matrixen en er worden wiskundige bewerkingen uitgevoerd. Als je je dan bedenkt dat er in die textbox geen intellisense beschikbaar is, dan moet je eigenlijk de volledige syntax vanbuiten kennen en moet je weten dat de wiskundige constante e in feite Math.E is, dat het Math.Atan is en geen Math.Arctan, ... Die laatste dingen zijn maar simpele voorbeelden aangezien ik toch van plan ben een user reference te maken waarin de belangrijkste van die zaken gewoon vermeld staan. Maar je hebt ook geen manier om simpel te debuggen en geen syntax highlighting.

Dus had ik het graag nog eenvoudiger gezien.
• Een variable bijvoorbeeld, moet geen int, string, double[], ... zijn maar gewoonweg een "var" waar je gelijk wat kan aan toekennen. Zoals in matlab bijvoorbeeld.
• Alle getallen zouden gewoon doubles moeten zijn. Verder bouwend op het bovenstaande; in matlab zijn alle variabelen matrices van doubles. Een enkel getal is dan gewoon een matrix van 1x1.
• Loops (while, for) en if (eventueel switch) zouden mogelijk moeten zijn.
• Variabelen kunnen wegschrijven in een file.
• Wiskundige bewerkingen.
• Zo eenvoudig mogelijke syntax (c-like, basic like?)
• En het belangrijkste: het controllerboard moet aangesproken kunnen worden (door functies in C# aan te roepen?)

Ik heb al heel wat uurtjes zitten googlen en zelf zitten proberen maar ben nog niet echt verder geraakt. Er lijken heel veel scripttalen te bestaan en soms zie ik door de bomen het bos niet meer. Zaken als IronPython lijken mij te ingewikkeld voor wat ik nodig heb, denk ik. Daarom wou ik vragen of iemand hier al ervaring heeft met een scripttaal met een heel eenvoudige syntax die te integreren is in .NET (C#) of die op één of andere manier functies kan aanroepen uit mijn programma?
Of is dit allemaal toch mogelijk met de .NET CodeDOM? Of liggen mijn eisen gewoon te hoog? :P
Ik heb ook al overwogen zelf een interpreter te schrijven maar vrees dat ik er teveel tijd in zal moeten steken om het geheel goed en bugvrij te krijgen. Of is het eenvoudiger dan ik denk?? :)

Dus indien iemand het ziet zitten om deze lange post te lezen en wat ideeën uit te spuwen, zou ik heel erg blij zijn. Het hoeft niet meteen kant en klaar voorgekauwd te zijn ;) Alvast bedankt!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je moet eens gaan kijken naar een DSL. Ik meen dat Microsoft daar wel wat leuke tools/libraries/frameworks voor heeft. Misschien hier of hier ergens. Ik had er ooit een bookmark van met een mooie uitleg/tutorial/etc. maar ben er nooit aan toegekomen 't zelf te lezen en ik kan de bookmark niet meer vinden :|

offtopic:
Ik heb even (m/v) uit de titel gesloopt. Ik had er bijna een "werving!!11 Slotje!" van gemaakt :P

[ Voor 46% gewijzigd door RobIII op 18-02-2010 22:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • user109731
  • Registratie: Maart 2004
  • Niet online
Laagvliegerke schreef op donderdag 18 februari 2010 @ 21:52:
Zaken als IronPython lijken mij te ingewikkeld voor wat ik nodig heb, denk ik.
Toch zou ik dit niet te snel afschrijven. IronPython is vrij volwassen, integreert goed in .Net en er is veel documentatie over. Python staat bekend om z'n cleane en eenvoudige syntax, de meeste punten die je noemt zijn volgens mij mogelijk:
Python:
1
2
3
4
5
6
7
8
9
x = 40
y = math.sin(x * math.pi)

if y > x:
    print 'y > x!'
    foo(x, y)
else:
    print 'y <= x!'
    bar(x, y)

Je kunt ook de math functies direct importeren zodat je de 'math.' prefix niet nodig hebt.

Talen als JavaScript en Lua worden ook vaak gebruikt en zijn beschikbaar voor .Net, maar die talen zijn ook vrij uitgebreid.

[ Voor 11% gewijzigd door user109731 op 18-02-2010 22:55 ]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
LUA kan ook makkelijk met C# geintegreerd worden, en dat is ook een erg sterke scriptaal die al erg veel gebruikt wordt (vooral in Games is lua erg populair).

http://www.gamedev.net/reference/articles/article2275.asp

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 21:08
Sorry voor m'n laatste reactie. Ik ben er de laatste tijd al zo veel mee bezig geweest dat ik het plots even beu was :P Lua had eerder al m'n aandacht getrokken maar de syntax leek me toch niet precies wat ik zocht. Al denk ik nu dat ik vooral iets TE eenvoudigs zocht, misschien kan het geen kwaad als ik er net iets meer kan. Nu ik jullie vol overtuiging IronPython en Lua opnoemen, ben ik misschien toch iets te snel geweest in het afschrijven van beide. IronRuby had ik ook al naar gekeken maar op den duur weet je het gewoon niet meer :P
Het is vooral belangrijk dat mathematische bewerkingen relatief eenvoudig kunnen gebeuren, matrices eenvoudig gedefinieerd en bewerkt kunnen worden en functies in C# aangeroepen kunnen worden. Van dat laaste heb ik al een voorbeeld gezien met Lua en dat leek eigenlijk niet zo heel erg moeilijk.
RobIII schreef op donderdag 18 februari 2010 @ 22:39:
offtopic:
Ik heb even (m/v) uit de titel gesloopt. Ik had er bijna een "werving!!11 Slotje!" van gemaakt :P
Op het moment van schrijven leek de m/v me wel grappig ;) En over de DSL; ik denk dat ik te weinig tijd heb om me daarin te verdiepen. Ik begin nu al wat in tijdsnood te komen, de hardware wou jammergenoeg ook niet direct mee. Toch bedankt!

[ Voor 23% gewijzigd door D-Three op 26-02-2010 00:12 ]