Allow "syntax" as a field name

Change-Id: I170a08dac02a9c6ac0f958f4467922bc0da5005f
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
index 7b82eb2..05242a4 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -252,15 +252,52 @@
 
 SafeId:
   ID | SafeReservedWord;
-  
-ReservedWord:  
+
+ReservedWord:
   SafeReservedWord | 'group' | 'oneof';
 
+// These tokens appear as keywords in other rules. Explicitly listing them here prevents the lexer
+// from consuming them as keywords and gives the parser a chance to interpret them as identifiers.
 SafeReservedWord:
-  'package' | 'import' | 'public' | 'option' | 'extend' | 'message' | 'optional' | 'required' | 'repeated' |
-  'enum' | 'service' | 'rpc' | 'stream' | 'returns' | 'default' | 'extensions' | 'to' | 'max' | 'true' | 'false' |
-  'double' | 'float' | 'int32' | 'int64' | 'uint32' | 'uint64' | 'sint32' | 'sint64' | 'fixed32' | 'fixed64' |
-  'sfixed32' | 'sfixed64' | 'bool' | 'string' | 'bytes' | 'weak' | 'map' | 'reserved';
+  'bool' |
+  'bytes' |
+  'default' |
+  'double' |
+  'enum' |
+  'extend' |
+  'extensions' |
+  'false' |
+  'fixed32' |
+  'fixed64' |
+  'float' |
+  'import' |
+  'int32' |
+  'int64' |
+  'map' |
+  'max' |
+  'message' |
+  'option' |
+  'optional' |
+  'package' |
+  'public' |
+  'repeated' |
+  'required' |
+  'reserved' |
+  'returns' |
+  'rpc' |
+  'service' |
+  'sfixed32' |
+  'sfixed64' |
+  'sint32' |
+  'sint64' |
+  'stream' |
+  'string' |
+  'syntax' |
+  'to' |
+  'true' |
+  'uint32' |
+  'uint64' |
+  'weak';
 
 SimpleValueLink:
   LiteralLink | BooleanLink | NumberLink | StringLink;