34 {
"if",
"or",
"in",
"do",
nullptr };
37 {
"and",
"end",
"for",
"nil",
"not",
nullptr };
40 {
"then",
"true",
"else",
nullptr };
43 {
"false",
"local",
"until",
"while",
"break",
nullptr };
46 {
"repeat",
"return",
"elseif",
nullptr};
49 {
"function",
"@interface",
"@end",
"@synthesize",
"@dynamic",
"@public",
50 "@private",
"@property",
"@protected",
"@class",
nullptr };
70 for (
int i = 0; k[i] !=
nullptr; ++i)
77 template <
typename Iterator>
78 static int parseIdentifier (Iterator& source)
noexcept
84 while (CppTokeniserFunctions::isIdentifierBody (source.peekNextChar()))
86 auto c = source.nextChar();
99 return LuaTokeniser::tokenType_keyword;
102 return LuaTokeniser::tokenType_identifier;
105 template <
typename Iterator>
106 static int readNextToken (Iterator& source)
108 source.skipWhitespace();
117 case '0':
case '1':
case '2':
case '3':
case '4':
118 case '5':
case '6':
case '7':
case '8':
case '9':
121 auto result = CppTokeniserFunctions::parseNumber (source);
123 if (result == LuaTokeniser::tokenType_error)
128 return LuaTokeniser::tokenType_punctuation;
138 return LuaTokeniser::tokenType_punctuation;
144 return LuaTokeniser::tokenType_bracket;
148 CppTokeniserFunctions::skipQuotedString (source);
149 return LuaTokeniser::tokenType_string;
153 CppTokeniserFunctions::skipIfNextCharMatches (source,
'+',
'=');
154 return LuaTokeniser::tokenType_operator;
159 auto result = CppTokeniserFunctions::parseNumber (source);
161 if (source.peekNextChar() ==
'-')
163 source.skipToEndOfLine();
164 return LuaTokeniser::tokenType_comment;
167 if (result == LuaTokeniser::tokenType_error)
169 CppTokeniserFunctions::skipIfNextCharMatches (source,
'-',
'=');
170 return LuaTokeniser::tokenType_operator;
179 CppTokeniserFunctions::skipIfNextCharMatches (source,
'=');
180 return LuaTokeniser::tokenType_operator;
185 return LuaTokeniser::tokenType_operator;
188 case '|':
case '&':
case '^':
190 CppTokeniserFunctions::skipIfNextCharMatches (source,
firstChar);
191 CppTokeniserFunctions::skipIfNextCharMatches (source,
'=');
192 return LuaTokeniser::tokenType_operator;
195 if (CppTokeniserFunctions::isIdentifierStart (
firstChar))
196 return parseIdentifier (source);
202 return LuaTokeniser::tokenType_error;