--- /dev/null
+/**\r
+ * Language expressions.\r
+ * @type {!Object.<string,!RegExp>}\r
+ * @expose\r
+ */\r
+ProtoBuf.Lang = {\r
+\r
+ // Characters always ending a statement\r
+ DELIM: /[\s\{\}=;:\[\],'"\(\)<>]/g,\r
+\r
+ // Field rules\r
+ RULE: /^(?:required|optional|repeated|map)$/,\r
+\r
+ // Field types\r
+ TYPE: /^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,\r
+\r
+ // Names\r
+ NAME: /^[a-zA-Z_][a-zA-Z_0-9]*$/,\r
+\r
+ // Type definitions\r
+ TYPEDEF: /^[a-zA-Z][a-zA-Z_0-9]*$/,\r
+\r
+ // Type references\r
+ TYPEREF: /^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,\r
+\r
+ // Fully qualified type references\r
+ FQTYPEREF: /^(?:\.[a-zA-Z_][a-zA-Z_0-9]*)+$/,\r
+\r
+ // All numbers\r
+ NUMBER: /^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,\r
+\r
+ // Decimal numbers\r
+ NUMBER_DEC: /^(?:[1-9][0-9]*|0)$/,\r
+\r
+ // Hexadecimal numbers\r
+ NUMBER_HEX: /^0[xX][0-9a-fA-F]+$/,\r
+\r
+ // Octal numbers\r
+ NUMBER_OCT: /^0[0-7]+$/,\r
+\r
+ // Floating point numbers\r
+ NUMBER_FLT: /^([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,\r
+\r
+ // Booleans\r
+ BOOL: /^(?:true|false)$/i,\r
+\r
+ // Id numbers\r
+ ID: /^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r
+\r
+ // Negative id numbers (enum values)\r
+ NEGID: /^\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r
+\r
+ // Whitespaces\r
+ WHITESPACE: /\s/,\r
+\r
+ // All strings\r
+ STRING: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")|(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,\r
+\r
+ // Double quoted strings\r
+ STRING_DQ: /(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,\r
+\r
+ // Single quoted strings\r
+ STRING_SQ: /(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g\r
+};\r