[Ometa] Simple arithmetic parser
Justin Chase
justin.m.chase at gmail.com
Thu Jan 7 15:31:24 PST 2010
PkZyb20gbG9va2luZyBhdCB5b3VyIGV4YW1wbGUgSSdtIG5vdCBzdXJlIHRoYXQncyBoZWxwaW5n
IHRoZSBjb21wbGV4aXR5CnByb2JsZW0uIEl0IHNlZW1zIGxpa2UgeW91J3JlIGp1c3QgYnJlYWtp
bmcgZWFjaCBtYXRjaCwgd2hpY2ggaXMgbm9ybWFsbHkKc2VwYXJhdGVkIGJ5IE9ScywgYW5kIG1h
a2luZyB0aGVtIHNlcGFyYXRlIHBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUuIEkKdGhpbmsgeW91
J3JlIGdvaW5nIHRvIGhhdmUgdGhlIHNhbWUgcHJvYmxlbSBzdGlsbCB0aG91Z2gsIGJlY2F1c2Ug
dGhhdCdzCnN0aWxsIGp1c3QgZGlyZWN0IHJlY3Vyc2lvbiAod2hpY2ggc2VlbWVkIG1vcmUgaW50
dWl0aXZlIHdpdGggdGhlIE9SJ3MpIGJ1dApzdXBwb3NpbmcgeW91IGhhZCBpbmRpcmVjdCByZWN1
cnNpb24uLi4gd2VsbCB0aGlzIHdvdWxkbid0IGhlbHAgbXVjaCBJIGRvbid0CnRoaW5rLgoKQnV0
IEkgdGhpbmsgeW91IGNhbiBnZXQgdGhlIGxheWVycyBzdGlsbCwgcHJvYmFibHkgdXNpbmcgdGhl
IHdob2xlIHBhcnNlcgp0aG91Z2guIE11bHRpcGxlIHBhcnNlciBwYXNzZXMsIG1heWJlIHRoYXQn
cyBhIHRvdGFsbHkgZGlmZmVyZW50IHN1YmplY3QKdGhvdWdoLgoKCjIwMTAvMS83IEFuZHJleSBG
ZWRvcm92IDxhbmZlZG9yb3ZAZ21haWwuY29tPgoKPiBUaGFua3MgZm9yIHRoZSB0aG9yb3VnaCBl
eHBsYW5hdGlvbiA6KSBJIGFjdHVhbGx5IHN0YXJ0ZWQgd2l0aCB0aGUgZXhhbXBsZQo+IGZyb20g
eW91ciBkaXNzZXJ0YXRpb24sIGFuZCBmbGF0dGVuZWQgaXQgdW5kZXIgdGhlIGNvbmNlcHRpb24g
dGhhdCB0aGUKPiBPUi1vcmRlcmluZyB3b3VsZCBwcmVzZXJ2ZSBwcmVjZWRlbmNlLiBJIHdvdWxk
IGhhdmUgdGhvdWdodCB0aGUgc2FtZSBvZiB0aGUKPiBpbmxpbmVkIHZlcnNpb24sIHNvIGF0IGxl
YXN0IGluIG15IG1pbmQsIGluZGlyZWN0IGxlZnQgcmVjdXJzaW9uIHdhc24ndAo+IGFkZGluZyB0
byB0aGUgY29uZnVzaW9uLCBGV0lXLgo+Cj4gQWxvbmcgdGhvc2UgbGluZXMsIEknbSB3aXRoIEp1
c3RpbiBpbiBoaXMgZGVzaXJlIHRvIG1ha2UgZ3JhbW1hcnMgZXZlbgo+IG1vcmUgaW50dWl0aXZl
IHRvIHdyaXRlIC0gYm90aCBiZWNhdXNlIG9mIG15IG93biBmcnVzdHJhdGlvbnMsIGFuZCBiZWNh
dXNlCj4gd2lkZSBhZG9wdGlvbiBvZiBwYXJzZXJzIHdvdWxkIGJlIGEgZ3JlYXQgdG8gc2VlLiBI
ZXJlJ3MgYSBiaXQgb2YgYW4gcmF3Cj4gdGhvdWdodDoKPgo+IENvdWxkIGl0IG1ha2Ugc2Vuc2Ug
dG8gYWRkIGV4cGxpY2l0IHN5bnRheCBmb3IgYSAibGF5ZXJzIiBvciAicHJlY2VkZW5jZSIKPiBt
ZXRhcGhvciB0byBncmFtbWFyIGRlZmluaXRpb25zLCB3aGljaCB3b3VsZCBwYXR0ZXJuLW1hdGNo
IGluIGRpc2NyZXRlCj4gcGFzc2VzPyBNYXliZSB1c2luZyBzZW1pY29sb25zLCBsaWtlOgo+Cj4g
cG1ldGEgRm9vIDw6IFBhcnNlciB7Cj4gICAgIG51bSA9IGNoYXJSYW5nZSgnMCcsICc5JykrOmRp
Z2l0cywKPiAgICAgZXhwID0gbnVtIHwgIigiIGV4cCAiKSI7Cj4KPiAgICAgZXhwID0gZXhwOmxo
cyAnKic6b3AgZXhwOnJoczsKPgo+ICAgICBleHAgPSBleHA6bGhzICcrJzpvcCBleHA6cmhzOwo+
IH0KPgo+IFRoZSBmaXJzdCBwYXNzKGVzKSB3b3VsZCBtZXJnZSBhbGwgc2VxdWVuY2VzIG9mIG51
bWVyaWMgY2hhcmFjdGVycyBpbnRvCj4gIm51bSIgb2JqZWN0cywgZGVmaW5lICJudW0iIGFzIGEg
dHlwZSBvZiAiZXhwIiwgYW5kIG1lcmdlIGFsbCBwYXR0ZXJucyBsaWtlCj4gIig8ZXhwPikiIHRv
IGJlIGFub3RoZXIgImV4cCIuIFRoZSBzZWNvbmQgcGFzcyhlcykgd291bGQgbWVyZ2UgYWxsIHBh
dHRlcm5zCj4gbGlrZSAiPGV4cD4qPGV4cD4iIGludG8gYW4gImV4cCIsIHRoZSBsYXN0IHBhc3Mo
ZXMpIHdvdWxkIG1lcmdlIGFsbAo+ICI8ZXhwPis8ZXhwPiIgaW50byBhbiAiZXhwIi4KPgo+IEkn
bSBzdXJlIGl0J3MgYmVlbiB0aG91Z2h0IG9mLCBob3dldmVyIC0gZG9lcyB0aGlzIHJpbmcgYW55
IGJlbGxzIGZvcgo+IGFueW9uZT8KPgo+IENoZWVycywKPiBBbmRyZXkKPgo+IDIwMTAvMS83IEFs
ZXNzYW5kcm8gV2FydGggPGFsZXh3YXJ0aEBnbWFpbC5jb20+Cj4KPj4gSGkgQW5kcmV5LAo+Pgo+
PiBTdXJlLCBPTWV0YS9KUyBkb2Vzbid0IHN1cHBvcnQgaW5kaXJlY3QgbGVmdCByZWN1cnNpb24u
Li4gYnV0IGV2ZW4gaWYgaXQKPj4gZGlkLCB5b3VyIGdyYW1tYXIgd291bGRuJ3Qgd29yayBhcyB5
b3UgaW50ZW5kZWQuIENvbnNpZGVyIHRoZQo+PiBmb2xsb3dpbmcgcmVmYWN0b3Jpbmcgb2YgeW91
ciBncmFtbWFyLCBpbiB3aGljaCB0aGUgdXNlcyBvZiB0aGUgYWRkLCBtdWwsCj4+IGFuZCBpbmZp
eCBydWxlcyBoYXZlIGJlZW4gaW5saW5lZDoKPj4KPj4gb21ldGEgQXJpdGhtZXRpYyA8OiBQYXJz
ZXIgewo+PiAgICAgbnVtID0gc3BhY2VzIGRpZ2l0KzpkcyAtPiBwYXJzZUludChkcy5qb2luKCIi
KSksCj4+Cj4+ICAgICBleHAgPSBleHA6bCAiKiIgZXhwOnIgLT4gWycqJywgbCwgcl0KPj4gICAg
ICAgICB8IGV4cDpsICIrIiBleHA6ciAtPiBbJysnLCBsLCByXQo+PiAgICAgICAgIHwgbnVtCj4+
ICAgICAgICAgfCAiKCIgZXhwOmUgIikiIC0+IGUKPj4gfQo+Pgo+PiAoRm9yIHRoZSBzYWtlIG9m
IGtlZXBpbmcgdGhpcyBkaXNjdXNzaW9uIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSwgSSd2ZSBhbHNv
Cj4+IGdvdHRlbiByaWQgb2YgdGhlIC0gYW5kIC8gb3BlcmF0b3JzLikKPj4KPj4gTm93IHRoYXQg
ZXhwIGlzIG9ubHkgKmRpcmVjdGx5KiBsZWZ0LXJlY3Vyc2l2ZSwgaXQncyBtdWNoIGVhc2llciB0
bwo+PiByZWFzb24gYWJvdXQuIEFuZCBpdCdzIGVhc3kgdG8gc2VlIHRoYXQgaXQgd29uJ3Qgd29y
aywgYmVjYXVzZSB5b3UndmUKPj4gImZsYXR0ZW5lZCIgdHdvIGRpZmZlcmVudCBsZXZlbHMgb2Yg
cHJlY2VkZW5jZSBpbnRvIGEgc2luZ2xlIHJ1bGUsIGUuZy4sIGlmCj4+IHlvdSB0cnkgdG8gcGFy
c2UgIjErMiozIiwgeW91J2xsIGVuZCB1cCB3aXRoIHRoZSBwYXJzZSB0cmVlIFsrLCAxLCBbKiwg
MiwKPj4gM11dLgo+Pgo+PiBNSU5JIFJBTlQ6IHRoZSBmYWN0IHRoYXQgSSBoYWQgdG8gcmVmYWN0
b3IgeW91ciBncmFtbWFyIGluIG9yZGVyIHRvIG1ha2UKPj4gdGhpcyBwb2ludCBpbGx1c3RyYXRl
cyB3aHkgSSBhYnNvbHV0ZWx5ICpoYXRlKiBpbmRpcmVjdCBsZWZ0IHJlY3Vyc2lvbiAtLSBpdAo+
PiBhbHdheXMgb2JzY3VyZXMgdGhlIG1lYW5pbmcgb2YgYSBncmFtbWFyLCBhbmQgSU1PIHByb2dy
YW1tZXJzIHNob3VsZG4ndAo+PiB0b3VjaCBpdCB3aXRoIGEgdGVuLWZvb3QgcG9sZS4gQnV0IEkg
ZGlncmVzcyA6KQo+Pgo+PiBIZXJlJ3MgYSBzdWdnZXN0aW9uIGZvciB5b3VyIGdyYW1tYXIuIEhv
dyBhYm91dCB5b3UgcmV3cml0ZSB0aGUgaW5maXggcnVsZQo+PiBzbyB0aGF0IGl0IHRha2VzIGJv
dGggYW4gb3BlcmF0b3IgYW5kIHRoZSBydWxlcyB0aGF0IHNob3VsZCBwYXJzZSBpdHMKPj4gb3Bl
cmFuZHMgKHVzaW5nIE9NZXRhJ3MgYXBwbHkgcnVsZSk/IFRoZW4geW91IGNvdWxkIHVzZSBpdCBs
aWtlIHRoaXM6Cj4+Cj4+IGFkZEV4cHIgID0gaW5maXgoJ211bEV4cHInLCAgJysnKSB8IGluZml4
KCdtdWxFeHByJywgICctJykgfCBtdWxFeHByLAo+PiBtdWxFeHByICA9IGluZml4KCdwcmltRXhw
cicsICcqJykgfCBpbmZpeCgncHJpbUV4cHInLCAnLycpIHwgcHJpbUV4cHIsCj4+IHByaW1FeHBy
ID0gbnVtIHwgIigiIGV4cHI6ZSAiKSIgLT4gZSwKPj4gZXhwciA9IGFkZEV4cHIKPj4KPj4gQ2hl
ZXJzLAo+PiBBbGV4Cj4+Cj4+IDIwMTAvMS83IEFuZHJleSBGZWRvcm92IDxhbmZlZG9yb3ZAZ21h
aWwuY29tPgo+Pgo+PiBTZWVtcyBsaWtlIGl0LiBGcmFuayBTaGVhcmFyIGFsc28gcG9pbnRlZCBt
ZSB0bzoKPj4+IGh0dHA6Ly92cHJpLm9yZy9waXBlcm1haWwvb21ldGEvMjAwOS1NYXkvMDAwMTM3
Lmh0bWwKPj4+Cj4+PiBXaGVyZSBBbGV4IHBvaW50cyBvdXQgdGhhdCAiT01ldGEgZG9lcyBub3Qg
bWVtb2l6ZSB0aGUgcmVzdWx0cyBvZgo+Pj4gaGlnaGVyLW9yZGVyL3BhcmFtZXRlcml6ZWQgcHJv
ZHVjdGlvbnMsIGFuZCB0aGlzIG1lYW5zIHRoYXQgdGhleSBjYW4ndCBiZQo+Pj4gbGVmdC1yZWN1
cnNpdmUuIgo+Pj4KPj4+IENoZWVycywKPj4+IEFuZHJleQo+Pj4KPj4+IDIwMTAvMS83IEpvb3l1
bmcgSGFuIDxqb295dW5nLmhhbkBnbWFpbC5jb20+Cj4+Pgo+Pj4gSGkuCj4+Pj4KPj4+PiBJIHRo
aW5rIGl0J3MgdGhlIGluZGlyZWN0IGxlZnQgcmVjdXJzaW9uIHByb2JsZW0uIElmIHRoZSBvbWV0
YQo+Pj4+IGltcGxlbWVudGF0aW9uIHVzZXMgb2xkIG9tZXRhIGFsZ29yaXRobSBpdCBjYW4ndCBo
YW5kbGUgaW5kaXJlY3QgbGVmdAo+Pj4+IHJlY3Vyc2lvbi4KPj4+Pgo+Pj4+IFlvdSBtYXkgcmVm
b3JtdWxhdGUgdGhlIHByb2R1Y3Rpb24gcnVsZXMgbm90IHVzaW5nIGxlZnQgcmVjdXJzaW9uLiBP
cgo+Pj4+IGZpeCB0aGUgb21ldGEgaW1wbGVtZW50YXRpb24uCj4+Pj4KPj4+Pgo+Pj4+IOuCmOyd
mCBpUG9k7JeQ7IScIOuztOuDhAo+Pj4+Cj4+Pj4gMjAxMC4gMS4gNy4g7Jik7ZuEIDY6MjAgQW5k
cmV5IEZlZG9yb3YgPGFuZmVkb3JvdkBnbWFpbC5jb20+IOyekeyEsToKPj4+Pgo+Pj4+IEknbSB0
cnlpbmcgdG8gYnVpbGQgdXAgaGlnaGVyLW9yZGVyIHJ1bGVzIGxpa2UgSGFza2VsbCdzIGluZml4
ci88aHR0cDovL2dvb2dfMTI2Mjg1MzAwNzM0ND4KPj4+PiBpbmZpeGwgPGh0dHA6Ly93d3cuaGFz
a2VsbC5vcmcvdHV0b3JpYWwvZnVuY3Rpb25zLmh0bWwjc2VjdDMuMi4yPiBhbmQKPj4+PiBhbSBn
ZXR0aW5nIHN0dWNrIGhlcmU6Cj4+Pj4KPj4+Pgo+Pj4+IG9tZXRhIEFyaXRobWV0aWMgPDogUGFy
c2VyIHsKPj4+PiAgICAgaW5maXggOnggPSBleHA6bCA6b3AgPyhvcD09eCkgZXhwOnIgLT4gW3gs
IGwsIHJdLAo+Pj4+Cj4+Pj4gICAgICBudW0gPSBkaWdpdCs6ZHMgLT4gcGFyc2VJbnQoZHMuam9p
bigiIikpLAo+Pj4+Cj4+Pj4gICAgICBhZGQgPSBpbmZpeCgnKycpIHwgaW5maXgoJy0nKSwKPj4+
PiAgICAgbXVsID0gaW5maXgoJyonKSB8IGluZml4KCcvJyksCj4+Pj4KPj4+PiAgICAgZXhwID0g
bXVsIHwgYWRkIHwgbnVtIHwgIigiIGV4cDplICIpIiAtPiBlCj4+Pj4gfQo+Pj4+Cj4+Pj4gPj4+
IEFyaXRobWV0aWMubWF0Y2hBbGwoIjMqMiIsICJtdWwiKQo+Pj4+IFsqLCAzLCAyXQo+Pj4+Cj4+
Pj4gLS0gYnV0IC0tCj4+Pj4KPj4+PiA+Pj4gQXJpdGhtZXRpYy5tYXRjaEFsbCgiMyoyIiwgImV4
cCIpCj4+Pj4gMwo+Pj4+Cj4+Pj4gQ291bGQgc29tZW9uZSBoZWxwIGV4cGxhaW4/Cj4+Pj4KPj4+
PiBDaGVlcnMsCj4+Pj4gQW5kcmV5Cj4+Pj4KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwo+Pj4+IE9NZXRhIG1haWxpbmcgbGlzdAo+Pj4+IE9NZXRh
QHZwcmkub3JnCj4+Pj4gaHR0cDovL3Zwcmkub3JnL21haWxtYW4vbGlzdGluZm8vb21ldGEKPj4+
Pgo+Pj4+Cj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KPj4+PiBPTWV0YSBtYWlsaW5nIGxpc3QKPj4+PiBPTWV0YUB2cHJpLm9yZwo+Pj4+IGh0dHA6
Ly92cHJpLm9yZy9tYWlsbWFuL2xpc3RpbmZvL29tZXRhCj4+Pj4KPj4+Pgo+Pj4KPj4+IF9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBPTWV0YSBtYWls
aW5nIGxpc3QKPj4+IE9NZXRhQHZwcmkub3JnCj4+PiBodHRwOi8vdnByaS5vcmcvbWFpbG1hbi9s
aXN0aW5mby9vbWV0YQo+Pj4KPj4+Cj4+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwo+IE9NZXRhIG1haWxpbmcgbGlzdAo+IE9NZXRhQHZwcmkub3Jn
Cj4gaHR0cDovL3Zwcmkub3JnL21haWxtYW4vbGlzdGluZm8vb21ldGEKPgo+CgoKLS0gCkp1c3Rp
biBDaGFzZQpodHRwOi8vd3d3Lmp1c3RuYnVzaW5lc3MuY29tCi0tLS0tLS0tLS0tLS0tIG5leHQg
cGFydCAtLS0tLS0tLS0tLS0tLQpBbiBIVE1MIGF0dGFjaG1lbnQgd2FzIHNjcnViYmVkLi4uClVS
TDogaHR0cDovL3Zwcmkub3JnL3BpcGVybWFpbC9vbWV0YS9hdHRhY2htZW50cy8yMDEwMDEwNy8y
OTE2ZTcyNi9hdHRhY2htZW50LTAwMDEuaHRtCg==
More information about the OMeta
mailing list