diff --git a/pymbolic/mapper/evaluator.py b/pymbolic/mapper/evaluator.py
index 81e049787e9e3ee76b58f309c5bbdde8c9f68645..b7921bdbefd7fc6f456388a318ef0505b5b02c72 100644
--- a/pymbolic/mapper/evaluator.py
+++ b/pymbolic/mapper/evaluator.py
@@ -94,6 +94,9 @@ class EvaluationMapper(RecursiveMapper):
     def map_max(self, expr):
         return min(self.rec(child) for child in expr.children)
 
+    def map_tuple(self, expr):
+        return tuple(self.rec(child) for child in expr)
+
 
 
 
diff --git a/pymbolic/parser.py b/pymbolic/parser.py
index 3a1a59015d81289ae0b029025d1d449e1cb19d26..8c6fafb48fdaf9e853c5180fabd7f17c5f641eca 100644
--- a/pymbolic/parser.py
+++ b/pymbolic/parser.py
@@ -37,7 +37,7 @@ _LEX_TABLE = [
     (_identifier, pytools.lex.RE(r"[a-z_A-Z_][a-zA-Z_0-9]*")),
     (_whitespace, pytools.lex.RE("[ \n\t]*")),
     (_comma, pytools.lex.RE(",")),
-    (_dot, pytools.lex.RE(".")),
+    (_dot, pytools.lex.RE(r"\.")),
     ]
 
 _PREC_COMMA = 5
@@ -107,6 +107,7 @@ def parse(expr_str):
                 pstate.advance()
                 did_something = True
             elif next_tag is _dot and _PREC_CALL > min_precedence:
+                1/0
                 pstate.advance()
                 pstate.expect(_identifier)
                 left_exp = primitives.Lookup(left_exp, pstate.next_str())