Implement parser/IR support for CFG functions, basic blocks and return instruction.

This is pretty much minimal scaffolding for this step.  Basic block arguments,
instructions, other terminators, a proper IR representation for
blocks/instructions, etc are all coming.

PiperOrigin-RevId: 201826439
diff --git a/lib/Parser/Lexer.cpp b/lib/Parser/Lexer.cpp
index 2e79271..5d224c7 100644
--- a/lib/Parser/Lexer.cpp
+++ b/lib/Parser/Lexer.cpp
@@ -66,9 +66,12 @@
     // Ignore whitespace.
     return lexToken();
 
+  case ':': return formToken(Token::colon, tokStart);
   case ',': return formToken(Token::comma, tokStart);
   case '(': return formToken(Token::l_paren, tokStart);
   case ')': return formToken(Token::r_paren, tokStart);
+  case '{': return formToken(Token::l_brace, tokStart);
+  case '}': return formToken(Token::r_brace, tokStart);
   case '<': return formToken(Token::less, tokStart);
   case '>': return formToken(Token::greater, tokStart);
 
@@ -148,6 +151,7 @@
     .Case("int", Token::kw_int)
     .Case("memref", Token::kw_memref)
     .Case("mlfunc", Token::kw_mlfunc)
+    .Case("return", Token::kw_return)
     .Case("tensor", Token::kw_tensor)
     .Case("vector", Token::kw_vector)
     .Default(Token::bare_identifier);