13af6ab5fSopenharmony_ci/** 23af6ab5fSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License. 53af6ab5fSopenharmony_ci * You may obtain a copy of the License at 63af6ab5fSopenharmony_ci * 73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83af6ab5fSopenharmony_ci * 93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and 133af6ab5fSopenharmony_ci * limitations under the License. 143af6ab5fSopenharmony_ci */ 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ci// Autogenerated file -- DO NOT EDIT! 173af6ab5fSopenharmony_ci 183af6ab5fSopenharmony_ci#ifndef ES2PANDA_LEXER_KEYWORDS_H 193af6ab5fSopenharmony_ci#define ES2PANDA_LEXER_KEYWORDS_H 203af6ab5fSopenharmony_ci 213af6ab5fSopenharmony_ci#include "lexer/keywordsBase.h" 223af6ab5fSopenharmony_ci#include "utils/span.h" 233af6ab5fSopenharmony_ci 243af6ab5fSopenharmony_ci// NOLINTBEGIN(readability-identifier-naming) 253af6ab5fSopenharmony_ci 263af6ab5fSopenharmony_cinamespace ark::es2panda::lexer { 273af6ab5fSopenharmony_ci% token_type_prefix = 'TokenType::' 283af6ab5fSopenharmony_ci% Keywords::extensions.each do |extension_name, desc| 293af6ab5fSopenharmony_ci% class_name = extension_name.upcase + 'Keywords' 303af6ab5fSopenharmony_ciclass <%=class_name%> : public Keywords { 313af6ab5fSopenharmony_cipublic: 323af6ab5fSopenharmony_ci explicit <%=class_name%>(Lexer* lexer, lexer::NextTokenFlags flags) : Keywords(lexer, flags) {} 333af6ab5fSopenharmony_ci NO_COPY_SEMANTIC(<%=class_name%>); 343af6ab5fSopenharmony_ci NO_MOVE_SEMANTIC(<%=class_name%>); 353af6ab5fSopenharmony_ci ~<%=class_name%>() = default; 363af6ab5fSopenharmony_ci 373af6ab5fSopenharmony_ci Span<const KeywordString> KeywordMap(char32_t cp) const override { 383af6ab5fSopenharmony_ci switch(cp) { 393af6ab5fSopenharmony_ci% desc['keyword_starts'].each do |cp| 403af6ab5fSopenharmony_ci case '<%= cp %>': return Span<const KeywordString>(KEYWORDS_<%= cp %>); 413af6ab5fSopenharmony_ci% end 423af6ab5fSopenharmony_ci default: return Span<const KeywordString>(); 433af6ab5fSopenharmony_ci } 443af6ab5fSopenharmony_ci } 453af6ab5fSopenharmony_ci 463af6ab5fSopenharmony_ci void ScanKeyword(char32_t cp) override { 473af6ab5fSopenharmony_ci ASSERT(cp >= 'a' && cp <= 'z'); 483af6ab5fSopenharmony_ci switch(cp) { 493af6ab5fSopenharmony_ci% desc['all_word_starts'].each do |cp| 503af6ab5fSopenharmony_ci case '<%=cp%>': Scan_<%=cp%>(); break; 513af6ab5fSopenharmony_ci% end 523af6ab5fSopenharmony_ci default: Util().ScanIdContinue(); break; 533af6ab5fSopenharmony_ci } 543af6ab5fSopenharmony_ci } 553af6ab5fSopenharmony_ci 563af6ab5fSopenharmony_ci void HandlePotentialEscapedKeyword(const KeywordString& kws) const override { 573af6ab5fSopenharmony_ci switch(kws.GetTokenType()) { 583af6ab5fSopenharmony_ci% desc['all_words'].select { |kw| kw&.custom_handler&.include? extension_name}.each do |kw| 593af6ab5fSopenharmony_ci case <%=token_type_prefix + kw.token %>: Util().SetKeyword(Handle_<%=kw.name %>(Util(), "<%=kw.name %>", <%=token_type_prefix + kw.token %>)); return; 603af6ab5fSopenharmony_ci% end 613af6ab5fSopenharmony_ci default: if (Util().KeywordToIdent()) { 623af6ab5fSopenharmony_ci return; 633af6ab5fSopenharmony_ci } 643af6ab5fSopenharmony_ci } 653af6ab5fSopenharmony_ci 663af6ab5fSopenharmony_ci Util().ThrowEscapedKeyword(); 673af6ab5fSopenharmony_ci } 683af6ab5fSopenharmony_ci 693af6ab5fSopenharmony_ci% desc['all_words'].select { |kw| kw&.custom_handler&.include? extension_name}.each do |kw| 703af6ab5fSopenharmony_ci // NOLINTNEXTLINE(readability-identifier-naming) 713af6ab5fSopenharmony_ci static KeywordString Handle_<%= kw.name%>(const KeywordsUtil& util, std::string_view src, TokenType tokenType); 723af6ab5fSopenharmony_ci% end 733af6ab5fSopenharmony_ci 743af6ab5fSopenharmony_ciprivate: 753af6ab5fSopenharmony_ci% desc['keyword_starts'].each do |cp| 763af6ab5fSopenharmony_ci% kws = desc['keywords'].select { |kw| kw.name[0] == cp } 773af6ab5fSopenharmony_ci static constexpr std::array<const KeywordString, <%= kws.size %>> KEYWORDS_<%= cp %> = {{ 783af6ab5fSopenharmony_ci% kws.each do |kw| 793af6ab5fSopenharmony_ci {"<%= kw.name%>", <%= token_type_prefix + kw.token %>}, 803af6ab5fSopenharmony_ci% end 813af6ab5fSopenharmony_ci }}; 823af6ab5fSopenharmony_ci% end 833af6ab5fSopenharmony_ci 843af6ab5fSopenharmony_ci% desc['tree'].each do |key, prefixes| 853af6ab5fSopenharmony_ci inline void Scan_<%= key %>() 863af6ab5fSopenharmony_ci { 873af6ab5fSopenharmony_ci switch(Util().Iterator().Peek()) { 883af6ab5fSopenharmony_ci% prefixes.select{|p| !p.nil? }.each do |prefix| 893af6ab5fSopenharmony_ci case '<%=prefix%>': { 903af6ab5fSopenharmony_ci Util().Iterator().Forward(1); 913af6ab5fSopenharmony_ci Scan_<%= key%><%= prefix %>(); 923af6ab5fSopenharmony_ci return; 933af6ab5fSopenharmony_ci } 943af6ab5fSopenharmony_ci% end 953af6ab5fSopenharmony_ci% if prefixes.include?(nil) 963af6ab5fSopenharmony_ci default: { 973af6ab5fSopenharmony_ci if (!KeywordsUtil::IsIdentifierPart(Util().Iterator().PeekCp())) { 983af6ab5fSopenharmony_ci% kw_desc = desc['all_words'].find{ |x| x.name == key } 993af6ab5fSopenharmony_ci% if kw_desc&.custom_handler&.include? extension_name 1003af6ab5fSopenharmony_ci SetKeyword<Handle_<%=key%>>({"<%=key%>", <%= token_type_prefix + kw_desc.token%>}); 1013af6ab5fSopenharmony_ci% else 1023af6ab5fSopenharmony_ci% token_type =kw_desc.token 1033af6ab5fSopenharmony_ci% if kw_desc&.keyword_like&.include? extension_name 1043af6ab5fSopenharmony_ci% token_type = 'LITERAL_IDENT' 1053af6ab5fSopenharmony_ci% end 1063af6ab5fSopenharmony_ci SetKeyword({"<%=key%>", <%=token_type_prefix + token_type%>, <%=token_type_prefix + kw_desc.token%>}); 1073af6ab5fSopenharmony_ci% end 1083af6ab5fSopenharmony_ci return; 1093af6ab5fSopenharmony_ci } 1103af6ab5fSopenharmony_ci break; 1113af6ab5fSopenharmony_ci } 1123af6ab5fSopenharmony_ci } 1133af6ab5fSopenharmony_ci% else 1143af6ab5fSopenharmony_ci default: { 1153af6ab5fSopenharmony_ci break; 1163af6ab5fSopenharmony_ci } 1173af6ab5fSopenharmony_ci } 1183af6ab5fSopenharmony_ci% end 1193af6ab5fSopenharmony_ci% if desc['keyword_starts'].include?(key[0]) 1203af6ab5fSopenharmony_ci Util().ScanIdContinueMaybeKeyword(this, Span<const KeywordString>(KEYWORDS_<%= key[0] %>)); 1213af6ab5fSopenharmony_ci% else 1223af6ab5fSopenharmony_ci Util().ScanIdContinue(); 1233af6ab5fSopenharmony_ci% end 1243af6ab5fSopenharmony_ci } 1253af6ab5fSopenharmony_ci 1263af6ab5fSopenharmony_ci% end 1273af6ab5fSopenharmony_ci}; 1283af6ab5fSopenharmony_ci% end 1293af6ab5fSopenharmony_ci} // namespace ark::es2panda::lexer 1303af6ab5fSopenharmony_ci 1313af6ab5fSopenharmony_ci// NOLINTEND(readability-identifier-naming) 1323af6ab5fSopenharmony_ci 1333af6ab5fSopenharmony_ci#endif 134