"@import" L C F(tk::AtImport, hi::Special);
"@selector" L C F(tk::AtSelector, hi::Meta);
+"@null" L C F(tk::AtNull, hi::Constant);
+"@YES" L C F(tk::AtYes, hi::Constant);
+"@NO" L C F(tk::AtNo, hi::Constant);
+"@true" L C F(tk::AtTrue, hi::Constant);
+"@false" L C F(tk::AtFalse, hi::Constant);
+
"NULL" L C I(identifier, Identifier("NULL"), tk::Identifier_, hi::Constant);
"nil" L C I(identifier, Identifier("nil"), tk::Identifier_, hi::Constant);
"YES" L C I(identifier, Identifier("YES"), tk::Yes, hi::Constant);
<<EOF>> if (yyextra->auto_) { yyextra->auto_ = false; F(tk::AutoComplete, hi::Nothing); } L yyterminate();
-@{IdentifierPart}+|\xe2.|. L E("unknown token")
+@{IdentifierStart}{IdentifierPart}*|\xe2.|. L E("unknown token")
%%
%token AtImport "@import"
%token AtEnd "@end"
%token AtSelector "@selector"
+%token AtNull "@null"
+%token AtYes "@YES"
+%token AtNo "@NO"
+%token AtTrue "@true"
+%token AtFalse "@false"
%token <identifier_> Yes "YES"
%token <identifier_> No "NO"
@end
PrimaryExpression
: "@" BoxableExpression { $$ = CYNew CYBox($2); }
+ | "@YES" { $$ = CYNew CYBox(CYNew CYTrue()); }
+ | "@NO" { $$ = CYNew CYBox(CYNew CYFalse()); }
+ | "@true" { $$ = CYNew CYBox(CYNew CYTrue()); }
+ | "@false" { $$ = CYNew CYBox(CYNew CYFalse()); }
+ | "@null" { $$ = CYNew CYBox(CYNew CYNull()); }
;
/* }}} */
/* Cycript (Objective-C): Block Expressions {{{ */