Introduced reserved words in strict mode.
diff --git a/src/njs_lexer_tables.h b/src/njs_lexer_tables.h
index c9ad680..e650325 100644
--- a/src/njs_lexer_tables.h
+++ b/src/njs_lexer_tables.h
@@ -159,7 +159,7 @@
     {
         .entry = { njs_str("implements") },
         .type = NJS_TOKEN_IMPLEMENTS,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -183,13 +183,13 @@
     {
         .entry = { njs_str("interface") },
         .type = NJS_TOKEN_INTERFACE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("let") },
         .type = NJS_TOKEN_LET,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -219,25 +219,25 @@
     {
         .entry = { njs_str("package") },
         .type = NJS_TOKEN_PACKAGE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("private") },
         .type = NJS_TOKEN_PRIVATE,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("protected") },
         .type = NJS_TOKEN_PROTECTED,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
         .entry = { njs_str("public") },
         .type = NJS_TOKEN_PUBLIC,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
@@ -249,7 +249,7 @@
     {
         .entry = { njs_str("static") },
         .type = NJS_TOKEN_STATIC,
-        .reserved = 0
+        .reserved = 1
     },
 
     {
diff --git a/src/njs_parser.c b/src/njs_parser.c
index 259e0dc..2b41ae7 100644
--- a/src/njs_parser.c
+++ b/src/njs_parser.c
@@ -4550,6 +4550,12 @@
             break;
 
         default:
+            if (njs_lexer_token_is_reserved(token)) {
+                njs_lexer_consume_token(parser->lexer, 1);
+                njs_parser_next(parser, njs_parser_failed_state);
+                return NJS_OK;
+            }
+
             if (njs_lexer_token_is_binding_identifier(token)) {
                 njs_parser_next(parser, njs_parser_lexical_declaration);
                 break;
diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c
index 5aa43f9..5d1e3ea 100644
--- a/src/test/njs_unit_test.c
+++ b/src/test/njs_unit_test.c
@@ -9475,6 +9475,12 @@
     { njs_str("function f(){} typeof(f)"),
       njs_str("function") },
 
+    { njs_str("function let() {}"),
+      njs_str("SyntaxError: Unexpected token \"let\" in 1") },
+
+    { njs_str("function static() {}"),
+      njs_str("SyntaxError: Unexpected token \"static\" in 1") },
+
     /* Recursive factorial. */
 
     { njs_str("function f(a) {"
@@ -18101,7 +18107,7 @@
 
     { njs_str("var let = 123;"
               "let"),
-      njs_str("123") },
+      njs_str("SyntaxError: Unexpected token \"let\" in 1") },
 
     { njs_str("var const = 123"),
       njs_str("SyntaxError: Unexpected token \"const\" in 1") },
diff --git a/utils/lexer_keyword.py b/utils/lexer_keyword.py
index 8ba967d..253aaad 100755
--- a/utils/lexer_keyword.py
+++ b/utils/lexer_keyword.py
@@ -64,14 +64,14 @@
     "debugger": 1,
     "enum": 1,
     "extends": 1,
-    "implements": 0,
-    "interface": 0,
-    "let": 0,
-    "package": 0,
-    "private": 0,
-    "protected": 0,
-    "public": 0,
-    "static": 0,
+    "implements": 1,
+    "interface": 1,
+    "let": 1,
+    "package": 1,
+    "private": 1,
+    "protected": 1,
+    "public": 1,
+    "static": 1,
     "super": 1
 }