Add '*' and '?' and optional brace parse calls to the Parser
authorEric Schweitz <eric.schweitz@pgroup.com>
Tue, 19 Nov 2019 18:13:33 +0000 (10:13 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Tue, 19 Nov 2019 18:14:15 +0000 (10:14 -0800)
Closes tensorflow/mlir#245

PiperOrigin-RevId: 281321459

mlir/include/mlir/IR/DialectImplementation.h
mlir/lib/Parser/Parser.cpp

index b8452ac..c645a24 100644 (file)
@@ -185,9 +185,15 @@ public:
   /// Parse a '{' token.
   virtual ParseResult parseLBrace() = 0;
 
+  /// Parse a '{' token if present
+  virtual ParseResult parseOptionalLBrace() = 0;
+
   /// Parse a `}` token.
   virtual ParseResult parseRBrace() = 0;
 
+  /// Parse a `}` token if present
+  virtual ParseResult parseOptionalRBrace() = 0;
+
   /// Parse a `:` token.
   virtual ParseResult parseColon() = 0;
 
@@ -264,6 +270,12 @@ public:
   /// Parse a `...` token if present;
   virtual ParseResult parseOptionalEllipsis() = 0;
 
+  /// Parse a `?` token.
+  virtual ParseResult parseOptionalQuestion() = 0;
+
+  /// Parse a `*` token.
+  virtual ParseResult parseOptionalStar() = 0;
+
   //===--------------------------------------------------------------------===//
   // Attribute Parsing
   //===--------------------------------------------------------------------===//
index 9dd6d50..e7842d3 100644 (file)
@@ -501,11 +501,21 @@ public:
     return parser.parseToken(Token::l_brace, "expected '{'");
   }
 
+  /// Parse a '{' token if present
+  ParseResult parseOptionalLBrace() override {
+    return success(parser.consumeIf(Token::l_brace));
+  }
+
   /// Parse a `}` token.
   ParseResult parseRBrace() override {
     return parser.parseToken(Token::r_brace, "expected '}'");
   }
 
+  /// Parse a `}` token if present
+  ParseResult parseOptionalRBrace() override {
+    return success(parser.consumeIf(Token::r_brace));
+  }
+
   /// Parse a `:` token.
   ParseResult parseColon() override {
     return parser.parseToken(Token::colon, "expected ':'");
@@ -596,6 +606,16 @@ public:
     return success(parser.consumeIf(Token::r_square));
   }
 
+  /// Parses a '?' if present.
+  ParseResult parseOptionalQuestion() override {
+    return success(parser.consumeIf(Token::question));
+  }
+
+  /// Parses a '*' if present.
+  ParseResult parseOptionalStar() override {
+    return success(parser.consumeIf(Token::star));
+  }
+
   /// Returns if the current token corresponds to a keyword.
   bool isCurrentTokenAKeyword() const {
     return parser.getToken().is(Token::bare_identifier) ||