LL1文法简易表达式计算器Ver.2

2012-10-03 08:45

LL1文法简易表达式计算器Ver.2

by misakamm

at 2012-10-03 00:45:52

original http://blog.misakamm.org/p/417

这个版本应该是作为简单计算器的最后一个版本了。这个版本支持除了(,;)以外的运算符自定义,函数自定义。而函数视为普通的变量的一种类型,可以重新赋值,写的自定义类型支持区分左右值,支持三种类型:integer, float, string,可以做类型转换,支持.运算(加的自定义),于是支持”abc”.len这种语法。并且允许函数返回自身,而正因为示例自定义代码中的swap函数返回函数本身,于是支持swap(a,b)(c,d)(e,f)成组交换这种语法糖果。。。

文法:
TK->E;TK|E
E ->NE’
E’->E2E’|e
E2->lNE3|rEE3|e
E3->lEE3|rEE3|e
N ->sN|T
T ->V(E)T’|V(E)T’|VT’
T’->xT’|e
V ->VAR|(E)
F ->EF’
F’->,EF’|e
至于出现了E2E3这货,是我考虑的不全面弄成的奇葩(各种结合性优先级把我弄晕了),现在懒得改了,下个版本直接重写解决掉,下个版本将想办法支持定义函数,和作用域(当然下个版本已经不算是计算器了,足够作为一个独立语言了,只要满足图灵完全。。。当然前提是如果做成功的话)

源代码及演示链接 ideone.com/lQJ5p