diff --git a/parser.py b/parser.py new file mode 100644 index 0000000..49efb89 --- /dev/null +++ b/parser.py @@ -0,0 +1,60 @@ +# coding=UTF-8 +# Relation +# Copyright (C) 2008 Salvo "LtWorf" Tomaselli +# +# Relation is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# author Salvo "LtWorf" Tomaselli + +def parse(expr): + '''This function parses a relational algebra expression, converting it into python, + executable by eval function to get the result of the expression.''' + + #Selection σage > 25 Λ rank = weight(A) + #Projection π a,b(A) + #Rename ρid➡i,name➡n(A) + #A ᑌ B + #A ᐅᐊ B + #A ᑎ B + + result="" + symbols={} + symbols["*"]=".product(%s)" + symbols["-"]=".difference(%s)" + symbols["ᑌ"]=".union(%s)" + symbols["ᑎ"]=".intersection(%s)" + symbols["ᐅᐊ"]=".join(%s)" + symbols["ᐅᐊLEFT"]=".outer_left(%s)" + symbols["ᐅᐊRIGHT"]=".outer_right(%s)" + symbols["ᐅᐊFULL"]=".outer(%s)" + + tokens=expr.split(" ") + + i=0; + tk_l=len(tokens) + while i