Support for in and function calls
diff --git a/plyxproto/logicparser.py b/plyxproto/logicparser.py
index 4af0cb6..30b1bf6 100644
--- a/plyxproto/logicparser.py
+++ b/plyxproto/logicparser.py
@@ -9,7 +9,7 @@
 from helpers import LexHelper, LU
 
 class FOLLexer(object):
-    keywords = ('forall', 'exists', 'True', 'False', 'not')
+    keywords = ('forall', 'exists', 'True', 'False', 'not', 'in')
 
     tokens = ['STRING_LITERAL', 'NUM', 'ESCAPE', 'COLON', 'IMPLIES', 'OR', 'AND', 'LPAREN', 'RPAREN', 'EQUALS', 'SYMBOL', 'LT', 'RT'] + [k.upper() for k in keywords]
     # literals = '()+-*/=?:,.^|&~!=[]{};<>@%'
@@ -47,7 +47,7 @@
         t.lexer.lineno += t.value.count('\n')
 
     def t_SYMBOL(self, t):
-        '[A-Za-z_$][\.A-Za-z0-9_+$]*'
+        '[A-Za-z_$][\.A-Za-z2-9_+$]*(\(\))?'
         if t.value in FOLLexer.keywords:
             t.type = t.value.upper()
         return t
@@ -100,6 +100,10 @@
         "fole : LPAREN fole RPAREN"
         p[0] = p[2]
 
+    def p_fole_in(self, p):
+        "fole : term IN term"
+        p[0] = {'in': (p[1], p[3])}
+
     def p_fole_equals(self, p):
         "fole : term EQUALS term"
         p[0] = {'=': (p[1], p[3])}