Files
fzu-product/.vitepress/dist/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.13.编写解析器.html

333 lines
207 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>13.编写解析器 | FZU-WIKI</title>
<meta name="description" content="FZU生存手册">
<meta name="generator" content="VitePress v1.3.2">
<link rel="preload stylesheet" href="/assets/style.B9ehgNx8.css" as="style">
<script type="module" src="/assets/app.WaHUZV8M.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.C2uBsot4.js">
<link rel="modulepreload" href="/assets/chunks/framework.DtvhUNIn.js">
<link rel="modulepreload" href="/assets/技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.13.编写解析器.md.zv8UQDFe.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar has-sidebar top" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-0ad69264><a class="title" href="/" data-v-0ad69264><!--[--><!--]--><!----><span data-v-0ad69264>FZU-WIKI</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-afb2845e data-v-08fbf4b6><!--[--><span data-v-08fbf4b6>首页</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-afb2845e data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-af5898d3><span class="text" data-v-af5898d3><!----><span data-v-af5898d3>章节</span><span class="vpi-chevron-down text-icon" data-v-af5898d3></span></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-20ed86d6><div class="items" data-v-20ed86d6><!--[--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/技术资源汇总(杭电支持版)/" data-v-f51f088d><!--[-->1. 前言<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/2.%E9%AB%98%E6%95%88%E5%AD%A6%E4%B9%A0/2.%E9%AB%98%E6%95%88%E5%AD%A6%E4%B9%A0.html" data-v-f51f088d><!--[-->2. 高效学习<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA.html" data-v-f51f088d><!--[-->3. 编程思维体系构建<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/4.%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD.html" data-v-f51f088d><!--[-->4. 人工智能<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/5.%E5%AF%8C%E6%9C%89%E7%94%9F%E5%91%BD%E7%9A%84%E5%B5%8C%E5%85%A5%E5%BC%8F/5.%E5%AF%8C%E6%9C%89%E7%94%9F%E5%91%BD%E7%9A%84%E5%B5%8C%E5%85%A5%E5%BC%8F.html" data-v-f51f088d><!--[-->5. 富有生命的嵌入式<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/6.%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AE%89%E5%85%A8/6.%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AE%89%E5%85%A8.html" data-v-f51f088d><!--[-->6. 计算机安全<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/7.%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/7.%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91.html" data-v-f51f088d><!--[-->7. 网络应用开发<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/8.%E5%9F%BA%E7%A1%80%E5%AD%A6%E7%A7%91/8.%E5%9F%BA%E7%A1%80%E5%AD%A6%E7%A7%91.html" data-v-f51f088d><!--[-->8. 基础学科<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-f51f088d><a class="VPLink link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/9.%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/9.%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html" data-v-f51f088d><!--[-->9. 计算机网络<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://gitea.xinxijishubu.asia/moyin/fzu-product" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af5898d3><span class="vpi-more-horizontal icon" data-v-af5898d3></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://gitea.xinxijishubu.asia/moyin/fzu-product" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-883964e0><button data-v-883964e0>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-edd2eed8><!----><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/%E5%86%85%E5%AE%B9%E7%B4%A2%E5%BC%95.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>返回上一层</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible has-active" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>3.编程思维体系构建</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.编程思维体系构建</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.0%20%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8%E4%B9%8B%E9%81%93.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.0 编程入门之道</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.1%E8%AF%A5%E4%BD%BF%E7%94%A8%E5%93%AA%E4%B8%AA%E7%BC%96%E8%BE%91%E5%99%A8%EF%BC%9F%EF%BC%9F%EF%BC%9F.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.1该使用哪个编辑器???</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>3.2算法杂谈</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.2%E7%AE%97%E6%B3%95%E6%9D%82%E8%B0%88.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.2算法杂谈</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.2.1%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%AD%A6%E7%AE%97%E6%B3%95%E2%80%94%E2%80%94%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8OJ%EF%BC%88Online%20Judge%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.2.1手把手教你学算法——如何使用OJOnline Judge</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.2.2ACM%20%E7%AB%9E%E8%B5%9B%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9D%9F.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.2.2ACM 竞赛从入门到入坟</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.3%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.3如何选择编程语言</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible has-active" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>3.4C语言</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4C%E8%AF%AD%E8%A8%80.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4C语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.1FAQ%EF%BC%9A%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.1FAQ:常见问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.2%E7%94%A8%E4%BB%80%E4%B9%88%E5%86%99%20C%20%E8%AF%AD%E8%A8%80.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.2用什么写 C 语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.3%E8%A7%A3%E5%86%B3%E7%BC%96%E7%A8%8B%E9%97%AE%E9%A2%98%E7%9A%84%E6%99%AE%E9%80%82%E6%80%A7%E8%BF%87%E7%A8%8B.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.3解决编程问题的普适性过程</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.4C%E8%AF%AD%E8%A8%80%E5%89%8D%E7%BD%AE%E6%A6%82%E5%BF%B5%E5%AD%A6%E4%B9%A0.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.4C语言前置概念学习</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>3.4.5阶段一:编程属性</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.5%E9%98%B6%E6%AE%B5%E4%B8%80%EF%BC%9A%E7%BC%96%E7%A8%8B%E5%B1%9E%E6%80%A7.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.5阶段一:编程属性</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.5.1C%E8%AF%AD%E8%A8%80%E8%87%AA%E6%B5%8B%E6%A0%87%E5%87%86%E2%80%94%E2%80%94%E9%93%BE%E8%A1%A8.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.5.1C语言自测标准——链表</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible has-active" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>3.4.6阶段二文字冒险cool</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6%E9%98%B6%E6%AE%B5%E4%BA%8C%EF%BC%9A%E6%96%87%E5%AD%97%E5%86%92%E9%99%A9%EF%BC%88cool%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6阶段二文字冒险cool</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.1.%E5%BC%80%E5%A7%8B%E5%86%92%E9%99%A9.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.1.开始冒险</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.2.%E6%8E%A2%E7%B4%A2%E6%9C%AA%E7%9F%A5.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.2.探索未知</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.3.%E6%8C%87%E6%98%8E%E5%9C%B0%E7%82%B9.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.3.指明地点</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.4.%E5%88%9B%E5%BB%BA%E5%AF%B9%E8%B1%A1.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.4.创建对象</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.5.%E6%8D%A1%E8%B5%B7%E7%89%A9%E5%93%81.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.5.捡起物品</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.6.%E7%BB%98%E5%88%B6%E5%9C%B0%E5%9B%BE.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.6.绘制地图</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.7.%E5%A2%9E%E5%A4%A7%E8%B7%9D%E7%A6%BB.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.7.增大距离</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.8.%E7%A7%BB%E5%8A%A8%E6%96%B9%E5%90%91.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.8.移动方向</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.9.%E7%BB%83%E4%B9%A0%EF%BC%9A%E7%94%9F%E6%88%90%E4%BB%A3%E7%A0%81.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.9.练习:生成代码</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.10.%E5%A2%9E%E6%B7%BB%E5%B1%9E%E6%80%A7.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.10.增添属性</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.11.%E8%AE%BE%E7%BD%AE%E6%9D%A1%E4%BB%B6.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.11.设置条件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.12.%E5%BC%80%E5%90%AF%E5%85%B3%E9%97%AD.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.12.开启关闭</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.13.%E7%BC%96%E5%86%99%E8%A7%A3%E6%9E%90%E5%99%A8.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.13.编写解析器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.14.%E4%B8%B0%E5%AF%8C%E5%91%BD%E4%BB%A4.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.14.丰富命令</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.15.%E8%B5%8B%E4%BA%88%E6%98%8E%E6%9A%97.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.15.赋予明暗</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.16.%E7%BB%93%E8%AF%AD%EF%BC%9A%E4%BD%A0%E7%BB%88%E5%B0%86%E8%87%AA%E7%94%B1.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.6.16.结语:你终将自由</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>3.4.7C基础知识杂谈</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7C%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E6%9D%82%E8%B0%88.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7C基础知识杂谈</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7.1GDB%E5%88%9D%E6%8E%A2%E7%B4%A2%EF%BC%88%E7%BC%96%E7%A8%8B%E5%8F%AF%E9%98%85%E8%A7%88%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7.1GDB初探索(编程可阅览)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7.1.1%E8%B0%83%E8%AF%95%E7%90%86%E8%AE%BA.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7.1.1调试理论</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7.2C%E7%9A%84%E5%8E%86%E5%8F%B2%E9%97%AE%E9%A2%98%EF%BC%9Aundefined%20behavior.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7.2C的历史问题undefined behavior</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7.3C%E7%BC%96%E8%AF%91%E5%99%A8%E5%B9%B2%E4%BA%86%E4%BB%80%E4%B9%88.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7.3C编译器干了什么</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.7.4Inline%20Assembly%E4%B8%8E%E9%93%BE%E6%8E%A5%E5%8A%A0%E8%BD%BD.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.4.7.4Inline Assembly与链接加载</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.5git%E4%B8%8Egithub.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.5git与github</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>3.6Python(灵巧的胶水)</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6Python%EF%BC%88%E7%81%B5%E5%B7%A7%E7%9A%84%E8%83%B6%E6%B0%B4%EF%BC%89.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6Python(灵巧的胶水)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.1%E4%BB%8ECS61A%E7%9C%8B%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.1从CS61A看编程语言学习</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.2%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.2环境配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.3%E5%AE%89%E8%A3%85python.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.3安装python</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h4 class="text" data-v-edd2eed8>3.6.4Python for fun</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4Python%20for%20fun.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4Python for fun</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.0%E9%98%B6%E6%AE%B5%E9%9B%B6%EF%BC%9APython%E8%A7%A3%E9%87%8A%E5%99%A8.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.0阶段零Python解释器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.1%E9%98%B6%E6%AE%B5%E4%B8%80%EF%BC%9A%E7%86%9F%E6%82%89%E8%AF%AD%E5%8F%A5.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.1阶段一:熟悉语句</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.2%E9%98%B6%E6%AE%B5%E4%BA%8C%EF%BC%9A%E9%80%92%E5%BD%92%E6%93%8D%E4%BD%9C.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.2阶段二:递归操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.3%E9%98%B6%E6%AE%B5%E4%B8%89%EF%BC%9A%E6%95%B0%E6%8D%AE%E6%8A%BD%E8%B1%A1.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.3阶段三:数据抽象</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.4%E9%98%B6%E6%AE%B5%E5%9B%9B%EF%BC%9A%E9%AB%98%E9%98%B6%E5%87%BD%E6%95%B0.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.4阶段四:高阶函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.5%E9%98%B6%E6%AE%B5%E4%BA%94%EF%BC%9A%E8%BF%AD%E4%BB%A3%E7%94%9F%E6%88%90.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.5阶段五:迭代生成</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.6.4.6%E7%BB%93%E8%AF%AD.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.6.4.6结语</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.X%20%E8%81%8A%E8%81%8A%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%92%8C%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.X 聊聊设计模式和程序设计</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible collapsed" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>3.Y 附加模块Linux</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y%20%E9%99%84%E5%8A%A0%E6%A8%A1%E5%9D%97%EF%BC%9ALinux.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y 附加模块Linux</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.1Linux%E6%A6%82%E5%BF%B5%E6%99%AE%E5%8F%8A.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.1Linux概念普及</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.2%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%92%8C%E5%8F%91%E8%A1%8C%E7%89%88%E6%8E%A8%E8%8D%90.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.2双系统安装和发行版推荐</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.3VMware%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E5%AE%89%E8%A3%85Ubuntu22.04%E7%B3%BB%E7%BB%9F.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.3VMware的安装与安装Ubuntu22.04系统</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.4WSL%E7%9A%84%E5%AE%89%E8%A3%85.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.4WSL的安装</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.5Linux%E5%88%9D%E6%8E%A2%E7%B4%A2.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.5Linux初探索</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.6Vim%E5%88%9D%E6%8E%A2%E7%B4%A2.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.6Vim初探索</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.Y.7linux%E5%B0%8F%E4%BB%BB%E5%8A%A1.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>3.Y.7linux小任务</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)_3_%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA_3_4_6_13_%E7%BC%96%E5%86%99%E8%A7%A3%E6%9E%90%E5%99%A8 external-link-icon-enabled" data-v-e6f2a212><div><h1 id="_13-编写解析器" tabindex="-1">13.编写解析器 <a class="header-anchor" href="#_13-编写解析器" aria-label="Permalink to &quot;13.编写解析器&quot;"></a></h1><p>每个文本冒险都有一个解析器,但是解析器也有高下之分。一个简单的 &quot;动词 - 名词 &quot;解析器(就像我们从第二章开始一直使用的那个)对于一个精心设计的冒险游戏来说可能已经足够了。</p><p>然而Infocom 已经证明,一个更高级的解析器确实有助于制作一个令人愉快的游戏。它不一定要通过图灵测试。</p><p>记住,它只是一个游戏。但是解析器应该使玩家能够以一种或多或少的自然方式来表达他的意图。</p><p>我们目前的分析器主要由两行代码组成,隐藏在 parsexec.c 中。</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">verb </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> strtok</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(input, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">noun </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> strtok</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>好吧,我们再加上将动词映射到命令的 strcmp 调用序列,以及将名词映射到对象的 noun.c 中的函数,但仅此而已。在过去的 12 章中,这个系统为我们提供了良好的服务,但它也有缺陷。</p><ul><li>它只接受 &quot;动词名词 &quot;形式的简单命令;它不理解既有直接宾语又有间接宾语的句子,如把硬币放进盒子。</li><li>它确实接受多字对象(如银币),但字与字之间的空格必须准确无误。我们的游戏拒绝银币和硬币之间的双空格。</li><li>它是区分大小写的;&quot;向北走 &quot;的命令因为大写的 &quot;G &quot;而不被识别。</li></ul><div class="warning custom-block"><p class="custom-block-title">🤔 思考题:你能想到有什么办法解决这些问题吗?</p></div><p>编写一个好的分析器并不是一件小事,但在这里我将给你一个相对简单的方法,我们将定义一个由模式列表组成的语法,类似于(但比)正则表达式要简单得多。</p><table tabindex="0"><thead><tr><th>look around</th><th>仅仅是匹配而已。双空格、前导空格、尾部空格和大小写差异都被忽略了</th></tr></thead><tbody><tr><td>go A</td><td>匹配单词 go 和对象的标签(见第 5 章和第 9 章关于 &quot;标签 &quot;的解释)。</td></tr><tr><td>put A in B</td><td>匹配单词 put 后面的标签,单词 in 和另一个标签。</td></tr></tbody></table><p>为了解析用户的输入,我们将从上到下遍历模式列表,依次尝试将用户的输入与每个模式匹配。我们将在发现第一个匹配时停止。为了简单起见,我们将不使用回溯,尽管这可以在以后添加。</p><div class="warning custom-block"><p class="custom-block-title">🤔 思考题:如果我们使用回溯,那该怎么编写代码?</p></div><p>大写字母是我们语法中的非终端符号,它们可以匹配任何标签(任何对象)。当解析器在两个不同的标签(例如 &quot;银币 &quot;&quot;&quot;)之间进行选择时,较长的标签将被优先考虑。</p><p>然后,匹配的标签可以作为参数名词传递给其中一个执行函数。对于有一个以上名词的命令(在下一章介绍),参数传递变得有点不切实际。为了简单起见,我们将使用一个全局变量而不是参数(尽管全局变量的名声不好)。该变量将是一个字符串指针的数组。</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">26</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">];</span></span></code></pre></div><p>该数组有 26 个元素;字母表中的每个(大写)字母都有一个,这足以满足一个模式中多达 26 个不同的非终端。对于一个(匹配的)模式中的每个非终端,将通过在非终端的数组元素中填充一个指向该特定标签的指针来 &quot;捕获 &quot;一个匹配的标签。params[0](第一个数组元素)捕获非终端 &quot;A&quot;params[1]捕获 &quot;B&quot;,以此类推。一个简单的宏定义可以用来找到属于某个非终端的数组元素。</p><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> paramByLetter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">letter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (params </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (letter) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;A&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div><p>注意:你可能会发现数组长度为 26 有点过头了,但它确实让我们省去了写一些边界检查代码的麻烦,以防止在出现畸形模式时出现缓冲区溢出。</p><p>现在,我们必须想出一个办法来处理缺失的或不被承认的名词。</p><p>假设用户打错了字,输入了 &quot;go kave&quot;。问题是,这个命令到底应不应该匹配 &quot;go A &quot;这个命令?如果我们不想出解决办法,那么这个命令将无法匹配任何其他命令,并最终进入一个通用的错误处理程序,它可能会回答 &quot;我不知道如何去 kave &quot;这样的话。这就失去了改进这些 &quot;消极反应 &quot;的所有机会;回答 &quot;我不知道你要去哪里 &quot;已经感觉更自然了。最好的办法是将所有关于命令去向的答复保持在函数 executeGo 内。</p><div class="warning custom-block"><p class="custom-block-title">🤔 停下来想一想,可以怎么解决这个问题?</p></div><p>有几种方法可以实现这一点,但最简单的方法是允许非终止符匹配任何东西。所以不仅仅是一个有效的标签,也包括完全的胡言乱语、空白或什么都没有这种语句。这种 &quot;无效 &quot;的输入将被捕获为一个空字符串(&quot;&quot;)。</p><p>在模式中间有这样一个 &quot;松散 &quot;的非终端,确实会使模式匹配过程复杂化;在匹配输入 &quot;把 foo 放在盒子里 &quot;和模式 &quot;把 A 放在 B 里 &quot;时,它需要回溯以正确对齐 &quot;in &quot;这个词。</p><p>为了简单起见,我们将只对出现在模式最末端的非终止符进行松散匹配。为了能够正确匹配上面的例子,我们需要两个独立的模式:</p><ul><li>模式 &quot;put A in B &quot;将匹配有效的命令 put coin in box以及无效的命令 put coin in booox 和 put coin in。注意非终端 A 只匹配有效的标签(在这个例子中是硬币)。</li><li>模式 &quot;put A &quot;匹配所有剩余的无效命令put coin, put koin, put koin in box, put koin in booox 和一个裸 put。还有最初的例子put foo in in box</li></ul><p>模式的顺序在这里至关重要:如果 &quot;放 A &quot;在上面(意味着它将被首先尝试),那么它将消耗每个放的命令;一个有效的 &quot;put coin in box &quot;命令将被认为是无效的,因为没有 &quot;硬币在盒子里 &quot;的标签。</p><p>对于以多种形式出现的命令也是如此,比如说 look 这个命令:</p><ul><li>Look around</li><li>look作为环顾四周的缩写</li><li>Look A</li></ul><p>前两个命令形式可以为任何顺序,但第三个必须在最后。</p><div class="warning custom-block"><p class="custom-block-title">🤔 思考题:你是否有办法解决这个问题?</p></div><p>是时候将其付诸行动了。我们将抛弃模块 parsexec.c 的现有内容,用一个新的函数 parseAndExecute 的实现来取代它,该函数使用一个模式列表,应该能够匹配我们到目前为止实现的每一条命令。每个模式都与一个执行相应命令的函数相联系。</p><h2 id="parsexec-c" tabindex="-1">parsexec.c <a class="header-anchor" href="#parsexec-c" aria-label="Permalink to &quot;parsexec.c&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> parseAndExecute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">input</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="parsexec-h" tabindex="-1">parsexec.h <a class="header-anchor" href="#parsexec-h" aria-label="Permalink to &quot;parsexec.h&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;ctype.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdbool.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdio.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;object.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;misc.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;match.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;location.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;inventory.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;openclose.h&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">typedef</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> struct</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pattern;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">function)(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} COMMAND;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeQuit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeNoMatch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">params;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> len;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (len </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[len] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> !</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">isspace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[len]); len</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //计算玩家输入的第一个字符串的长度</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (len </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;I don&#39;t know how to &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%.*s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, len, src);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> parseAndExecute</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">input</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> COMMAND commands</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">[]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //模式数组</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;quit&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeQuit },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;look&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLookAround },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;look around&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLookAround },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;look at A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLook },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;look A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLook },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;examine A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLook },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;go to A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeGo },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;go A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeGo },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;get A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeGet },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;drop A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeDrop },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;ask A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeAsk },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;give A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeGive },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;inventory&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeInventory },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;open A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeOpen },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;close A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeClose },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;lock A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeLock },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;unlock A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeUnlock },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;A&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> , executeNoMatch }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> };</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> COMMAND </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">cmd;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (cmd </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> commands; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">matchCommand</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(input, cmd-&gt;pattern); cmd</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">cmd-&gt;function)();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>最难的部分是函数 matchCommand 的实现。但正如你在下面看到的,这也可以在不到 100 行的代码中完成。</p><h2 id="match-h" tabindex="-1">match.h <a class="header-anchor" href="#match-h" aria-label="Permalink to &quot;match.h&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> MAX_PARAMS</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 26</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">params</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">[]</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#define</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> paramByLetter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">letter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (params </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (letter) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;A&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchCommand</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">pattern</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="match-c" tabindex="-1">match.c <a class="header-anchor" href="#match-c" aria-label="Permalink to &quot;match.c&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;ctype.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdbool.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;string.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;object.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;misc.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;match.h&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[MAX_PARAMS];</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">skipSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> while</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">isspace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">src)) src</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">matchSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ||</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> isspace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> skipSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">matchTerminal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">char</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> terminal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> terminal </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39; &#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ?</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tolower</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tolower</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(terminal) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">matchTag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">tag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> atEnd</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> while</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchTerminal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> atEnd </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">skipSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ?</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">matchParam</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> **</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">par</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> loose</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">restOfSrc </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> loose </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> strlen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> objs; obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> endOfObjs; obj</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> **</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (tag </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> obj-&gt;tags; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; tag</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">behindMatch </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchTag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag, loose);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (behindMatch </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> strlen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> strlen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tag;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> restOfSrc </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> behindMatch;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">**</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> restOfSrc;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchCommand</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">pattern</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> **</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> params; par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> params </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MAX_PARAMS; par</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">par </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> skipSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src); src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pattern </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; pattern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> isupper</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pattern)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ?</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchParam</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">paramByLetter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pattern), </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">pattern</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> matchTerminal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">pattern);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> src </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">skipSpaces</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(src) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>我们调整各种命令的实现,以利用新的数组参数。</p><h2 id="inventory-h" tabindex="-1"><strong>inventory.h</strong> <a class="header-anchor" href="#inventory-h" aria-label="Permalink to &quot;**inventory.h**&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGet</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeDrop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeAsk</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGive</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeInventory</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="inventory-c" tabindex="-1"><strong>inventory.c</strong> <a class="header-anchor" href="#inventory-c" aria-label="Permalink to &quot;**inventory.c**&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdbool.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdio.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;object.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;misc.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;match.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;noun.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;move.h&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGet</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> getVisible</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to get&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> switch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getDistance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player, obj))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distSelf:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You should not be doing that to yourself.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distHeld:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You already have </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, obj</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">description</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distOverthere:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Too far away, move closer please.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distUnknownObject:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // already handled by getVisible</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">location </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &amp;&amp;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> obj</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">location</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">health </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You should ask </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nicely.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, obj-&gt;location-&gt;description);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> moveObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(obj, player);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeDrop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> moveObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getPossession</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;drop&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]), player-&gt;location);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeAsk</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> moveObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getPossession</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">actorHere</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(), </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;ask&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]), player);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGive</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> moveObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getPossession</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;give&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]), </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">actorHere</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeInventory</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">listObjectsAtLocation</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You are empty-handed.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>我们在上一章中添加的模块也是如此。</p><h2 id="opemclose-h" tabindex="-1">opemclose.h <a class="header-anchor" href="#opemclose-h" aria-label="Permalink to &quot;opemclose.h&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeOpen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeClose</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLock</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeUnlock</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="openclose-c" tabindex="-1">openclose.c <a class="header-anchor" href="#openclose-c" aria-label="Permalink to &quot;openclose.c&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdbool.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdio.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;object.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;match.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;reach.h&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeOpen</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> reachableObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to open&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj-&gt;open)();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeClose</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> reachableObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to close&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj-&gt;close)();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLock</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> reachableObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to lock&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj-&gt;lock)();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeUnlock</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> reachableObject</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to unlock&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj-&gt;unlock)();</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>在 location.c 中look around 命令被赋予了自己的功能,与检查特定对象的 look 命令分开(见第 7-12 行)。</p><h2 id="location-h" tabindex="-1">location.h <a class="header-anchor" href="#location-h" aria-label="Permalink to &quot;location.h&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLookAround</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLook</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">extern</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="location-c" tabindex="-1">location.c <a class="header-anchor" href="#location-c" aria-label="Permalink to &quot;location.c&quot;"></a></h2><div class="language-c vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">c</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdbool.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &lt;stdio.h&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;object.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;misc.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;match.h&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">#include</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;noun.h&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLookAround</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You are in </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, player-&gt;location-&gt;description);</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> listObjectsAtLocation</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player-&gt;location);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLook</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> getVisible</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;what you want to look at&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> switch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getDistance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player, obj))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distHereContained:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Hard to see, try to get it first.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distOverthere:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;Too far away, move closer please.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distNotHere:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You don&#39;t see any </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> here.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distUnknownObject:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // already handled by getVisible</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, obj</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">details</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> listObjectsAtLocation</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(obj);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> movePlayer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">passage</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, passage-&gt;textGo);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (passage-&gt;destination </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NULL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> player-&gt;location </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> passage-&gt;destination;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeLookAround</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">bool</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> executeGo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> OBJECT </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">obj </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> getVisible</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;where you want to go&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> switch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getDistance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player, obj))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distOverthere:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> movePlayer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getPassage</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(player</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-&gt;</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">location</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, obj));</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distNotHere:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;You don&#39;t see any </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%s</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> here.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">params</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]);</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> case</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> distUnknownObject:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // already handled by getVisible</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> break</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> movePlayer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(obj);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>我们的游戏仍然只接受简单的动词 - 名词命令,但新的解析器确实有可能接受有多个名词的命令,如 &quot;put coin in box&quot;,这将在下一章中演示。</p><p>新的解析器比原来的解析器有了很大的改进,但以今天的标准来看,它仍然远远不够完美。例如,没有结构性的方法可以用一个命令操纵多个对象(&quot;获得硬币、钥匙和灯&quot;)或连续执行两个或多个命令(&quot;获得钥匙然后向东走&quot;)。这对于一个 RPG 游戏来说限制实在太大了!</p><p>在真正意义上,我们的分析器甚至不是一个分析器,它只是一个简单的模式匹配器。我们认为,对于一个简单的冒险游戏来说,它的工作已经足够好了。它的一些缺陷可以通过添加更多的模式而得到缓解。但最终,你会遇到它的局限性,你可能想转到更成熟的东西上。在这种情况下,我们推荐使用一个体面的分析器生成器(例如 Yacc。请注意这不是一件容易做到的事情。目前这已经超出了本教程的范围。 输出样例</p><p>Welcome to Little Cave Adventure. You are in an open field. You see: a silver coin a burly guard a cave entrance to the east dense forestall around</p><p>--&gt; get coin You pick up a silver coin.</p><p>--&gt; give coin You give a silver coin to a burly guard.</p><p>--&gt; go cave You walk into the cave.</p><p>You are in a little cave. You see: an exit to the west solid rock all around a closed door to the south a tiny key</p><p>--&gt; get key You pick up a tiny key.</p><p>--&gt; go south The door is closed.</p><p>--&gt; open door You open a closed door to the south.</p><p>--&gt; go south You walk through the door into a backroom.</p><p>You are in a backroom. You see: solid rock all around an open door to the north a wooden box</p><p>--&gt; unlock box You unlock a wooden box.</p><p>--&gt; open box You open a wooden box.</p><p>--&gt; examine box The box is open. You see: a gold coin</p><p>--&gt; get gold You get a gold coin from a wooden box.</p><p>--&gt; quit</p><p>Bye!</p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><div class="edit-link" data-v-1bcd8184><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://gitea.xinxijishubu.asia/moyin/fzu-product/src/branch/main/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.13.编写解析器.md" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="vpi-square-pen edit-link-icon" data-v-1bcd8184></span> 在 Gitea 上修改此页<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link prev" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.12.%E5%BC%80%E5%90%AF%E5%85%B3%E9%97%AD.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>上一小节</span><span class="title" data-v-1bcd8184>3.4.6.12.开启关闭</span><!--]--></a></div><div class="pager" data-v-1bcd8184><a class="VPLink link pager-link next" href="/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB(%E6%9D%AD%E7%94%B5%E6%94%AF%E6%8C%81%E7%89%88)/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.4.6.14.%E4%B8%B0%E5%AF%8C%E5%91%BD%E4%BB%A4.html" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>下一小节</span><span class="title" data-v-1bcd8184>3.4.6.14.丰富命令</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>Made with ❤️ by ALL 协作者</p><p class="copyright" data-v-566314d4>Copyright © 2023-present Evan You && ALL 协作者</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api-examples.md\":\"DzBTNBEE\",\"changelog.md\":\"FPNSm718\",\"contributing.md\":\"bKW9JrKc\",\"contributors.md\":\"Cw_T0DZB\",\"index.md\":\"B1O1f-Fa\",\"markdown-examples.md\":\"ByeFoAfn\",\"readme.md\":\"BdZRJ36M\",\"使用指南.md\":\"Cx3weXYo\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.1悲壮的学习方式.md\":\"DTYIoXXb\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.2浮躁的心理状态.md\":\"DqgEG2PN\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.3错误的提问姿态.md\":\"Dice7HmS\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.4书籍的盲目崇拜.md\":\"D7lBwdls\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1.5错误的学习配比.md\":\"CC8FrxOY\",\"技术资源汇总(杭电支持版)_2.高效学习_2.1高效的前提:摆脱高中思维.md\":\"y1dZYwTe\",\"技术资源汇总(杭电支持版)_2.高效学习_2.2优雅的使用工具.md\":\"H-IrZPye\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.1阅读文档b百度爬.md\":\"CoWHVc10\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.2检索论文核心内容.md\":\"BQCjGA_6\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3.3优秀的开源社区.md\":\"2FaigHdO\",\"技术资源汇总(杭电支持版)_2.高效学习_2.3高效的信息检索.md\":\"DbplLh_F\",\"技术资源汇总(杭电支持版)_2.高效学习_2.4优雅的记笔记.md\":\"BUxzDzb2\",\"技术资源汇总(杭电支持版)_2.高效学习_2.5以理工科的方式阅读英语.md\":\"CCv1xohP\",\"技术资源汇总(杭电支持版)_2.高效学习_2.6学会使用ai辅助学习.md\":\"BA8DOvYX\",\"技术资源汇总(杭电支持版)_2.高效学习_2.高效学习.md\":\"DceOYwF4\",\"技术资源汇总(杭电支持版)_2.高效学习_补充为什么不要用百度.md\":\"VkOSQaNc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.0 编程入门之道.md\":\"RO996sX2\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.1该使用哪个编辑器???.md\":\"B4ayWsWH\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2.1手把手教你学算法——如何使用ojonline judge.md\":\"BTq8bXJ7\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2.2acm 竞赛从入门到入坟.md\":\"DHh_AnzE\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.2算法杂谈.md\":\"Dyuzf5Rm\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.3如何选择编程语言.md\":\"BmznmeSr\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.1faq:常见问题.md\":\"BnJhsYE9\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.2用什么写 c 语言.md\":\"j3UKqDLB\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.3解决编程问题的普适性过程.md\":\"C2A_1-Fn\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.4c语言前置概念学习.md\":\"BkXXgE64\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.5.1c语言自测标准——链表.md\":\"DVzk3soj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.5阶段一:编程属性.md\":\"xzkNgg8e\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.1.开始冒险.md\":\"BOo28IRY\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.10.增添属性.md\":\"DfQyVaNx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.11.设置条件.md\":\"D1w5O6yc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.12.开启关闭.md\":\"CXNDx_7L\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.13.编写解析器.md\":\"zv8UQDFe\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.14.丰富命令.md\":\"B6oobOWP\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.15.赋予明暗.md\":\"DuKXxo2X\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.16.结语:你终将自由.md\":\"C-H3wZFU\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.2.探索未知.md\":\"Dic21KtY\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.3.指明地点.md\":\"CqJJTYJl\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.4.创建对象.md\":\"sYhd_x2h\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.5.捡起物品.md\":\"8K1USgEU\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.6.绘制地图.md\":\"B_DDqfPJ\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.7.增大距离.md\":\"cJuj5FdO\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.8.移动方向.md\":\"DfqXtQsJ\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6.9.练习:生成代码.md\":\"BWPCfe12\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.6阶段二文字冒险cool.md\":\"4wxQiLET\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.1.1调试理论.md\":\"BG8u_VZC\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.1gdb初探索(编程可阅览).md\":\"DxwzfDRm\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.2c的历史问题undefined behavior.md\":\"DhVRjYVK\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.3c编译器干了什么.md\":\"BmcVZay6\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7.4inline assembly与链接加载.md\":\"q2t6qdUO\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4.7c基础知识杂谈.md\":\"aePmhQYd\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.4c语言.md\":\"DkCJewM5\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.5git与github.md\":\"CHDigJYp\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.1从cs61a看编程语言学习.md\":\"DqQl-8bT\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.2环境配置.md\":\"BhEPqNzV\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.3安装python.md\":\"D3dPRaxz\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.0阶段零python解释器.md\":\"Dm3hX9NX\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.1阶段一:熟悉语句.md\":\"CLD1IJhu\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.2阶段二:递归操作.md\":\"D7XWEtHx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.3阶段三:数据抽象.md\":\"CDZ-i__T\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.4阶段四:高阶函数.md\":\"Dsl4HkDc\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.5阶段五:迭代生成.md\":\"5HYOHSTp\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4.6结语.md\":\"CCrZz2pj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6.4python for fun.md\":\"DkJd7Fze\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.6python(灵巧的胶水).md\":\"DiyVGPhf\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.x 聊聊设计模式和程序设计.md\":\"W9mozi2J\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y 附加模块linux.md\":\"BCrGPX21\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.0计算机教育中缺失的一课.md\":\"BWm_rSoC\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.1linux概念普及.md\":\"CzzMXts9\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.2双系统安装和发行版推荐.md\":\"CVKz1ljH\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.3vmware的安装与安装ubuntu22.04系统.md\":\"DvLQFSm4\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.4wsl的安装.md\":\"DxhJ6pfj\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.5linux初探索.md\":\"DsLYXQrx\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.6vim初探索.md\":\"ZriWo4yK\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.y.7linux小任务.md\":\"B0_ZolbN\",\"技术资源汇总(杭电支持版)_3.编程思维体系构建_3.编程思维体系构建.md\":\"buCvJWRO\",\"技术资源汇总(杭电支持版)_4.人工智能_4.10llmagent之结构化输出.md\":\"CiF3m2Gf\",\"技术资源汇总(杭电支持版)_4.人工智能_4.11本章节内容的局限性.md\":\"VdWbP1WW\",\"技术资源汇总(杭电支持版)_4.人工智能_4.1前言.md\":\"CbAU8DCP\",\"技术资源汇总(杭电支持版)_4.人工智能_4.2机器学习ai快速入门quick start.md\":\"BEeOolYI\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1.1程序示例——maze迷宫解搜索.md\":\"-nQ9ZG02\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1.2项目tic-tac-toe井字棋.md\":\"DpxLT41Z\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.1搜索.md\":\"oc9gmWWK\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2.1程序示例——命题逻辑与模型检测.md\":\"CVT6S5El\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2.2项目:扫雷,骑士与流氓问题.md\":\"DnpnWZd9\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.2知识推理.md\":\"Bdg-XBSz\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3.1程序示例.md\":\"D2D5pU2z\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3.2项目:遗传.md\":\"Bee7dgw8\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.3不确定性问题.md\":\"WmYBd5ms\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4.1程序示例.md\":\"Bm1E_RoV\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4.2项目:填词游戏.md\":\"BLt1E6wb\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3.4最优化.md\":\"CJEsAZQH\",\"技术资源汇总(杭电支持版)_4.人工智能_4.3人工智能导论及机器学习入门.md\":\"4RWDZfjp\",\"技术资源汇总(杭电支持版)_4.人工智能_4.4faq:常见问题.md\":\"BnI046IT\",\"技术资源汇总(杭电支持版)_4.人工智能_4.5图网络略述intro_gcn.md\":\"Cue-WAA8\",\"技术资源汇总(杭电支持版)_4.人工智能_4.6数据分析.md\":\"Cx1ZD5ZH\",\"技术资源汇总(杭电支持版)_4.人工智能_4.7如何做研究.md\":\"CtUhtBrq\",\"技术资源汇总(杭电支持版)_4.人工智能_4.8科研论文写作.md\":\"DSE7qt-X\",\"技术资源汇总(杭电支持版)_4.人工智能_4.9从 ai 到 智能系统 —— 从 llms 到 agents.md\":\"BFVSZab1\",\"技术资源汇总(杭电支持版)_4.人工智能_4.人工智能.md\":\"C7dQQcV1\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.1嵌入式是什么?可以吃吗?.md\":\"DSWjKS-a\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.2new meaning of c.md\":\"bNGQi2W2\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.3还玩裸机?上操作系统!.md\":\"C80bW3ek\",\"技术资源汇总(杭电支持版)_5.富有生命的嵌入式_5.富有生命的嵌入式.md\":\"C3jYEQFL\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.1.1sql 注入.md\":\"DQCIZdYm\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.1web安全.md\":\"DVP9mk53\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.1基础工具的使用.md\":\"DLiapAz1\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.2软件破解、软件加固.md\":\"BG-KmxLq\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2.3漏洞挖掘、漏洞利用.md\":\"TTf4uEbG\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.2二进制安全.md\":\"Dx7vf08P\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.3密码学.md\":\"1BmjaKRy\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.4安全杂项.md\":\"C-nq8JBF\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.5学习资料推荐.md\":\"2Z1hvv_V\",\"技术资源汇总(杭电支持版)_6.计算机安全_6.计算机安全.md\":\"DmuFdA7-\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.1web开发入门.md\":\"cABPZfmp\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.1基础(三件套).md\":\"CeF99FT3\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.2进阶(小项目).md\":\"DkPKrF8C\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.3附录1前端介绍详细版.md\":\"D_V6G3Oh\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.4附录2大前端开发.md\":\"B8u8kcUM\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2.5附录3跨端开发.md\":\"CaT9Y32W\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.2前端部分.md\":\"DCAcwGVN\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3.1基础部分.md\":\"BYudz3X8\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3.2进阶部分.md\":\"Cg-7LiyH\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.3后端部分.md\":\"DYZ24iwb\",\"技术资源汇总(杭电支持版)_7.网络应用开发_7.网络应用开发入门.md\":\"DrgT-DjX\",\"技术资源汇总(杭电支持版)_8.基础学科_8.1经济学科普part1.md\":\"DguU75dE\",\"技术资源汇总(杭电支持版)_8.基础学科_8.基础学科.md\":\"DE7yDZI_\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.1计网速通.md\":\"CkT2fLIN\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3.1ip协议.md\":\"Dm6ee4JO\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3.2子网与无类域间路由.md\":\"C3JPwLoF\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.2.3网络层.md\":\"BNya0rNF\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.3路由与交换.md\":\"BvDV79LN\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.4隧道和代理.md\":\"XNDQhj6B\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.5路由佬入门指南.md\":\"CSkj8qJ8\",\"技术资源汇总(杭电支持版)_9.计算机网络_9.计算机网络.md\":\"CSmCLjNp\",\"技术资源汇总(杭电支持版)_内容索引.md\":\"B9FSKjDT\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"FZU-WIKI\",\"description\":\"FZU生存手册\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"章节\",\"items\":[{\"text\":\"1. 前言\",\"link\":\"/技术资源汇总(杭电支持版)/\"},{\"text\":\"2. 高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"3. 编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"4. 人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"5. 富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"6. 计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"7. 网络应用开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发\"},{\"text\":\"8. 基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"9. 计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"}]}],\"sidebar\":{\"/\":[{\"text\":\"简介\",\"collapsed\":true,\"items\":[{\"text\":\"简介\",\"link\":\"/简介\"},{\"text\":\"使用指南\",\"link\":\"/使用指南\"},{\"text\":\"技术资源汇总(杭电支持版)\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"}]},{\"text\":\"1.杭电生存指南(最重要模块)\",\"collapsed\":true,\"items\":[{\"text\":\"1.1 人文社科的重要性(韩健夫老师寄语)\",\"link\":\"/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)\"},{\"text\":\"1.2 竞赛指北\",\"link\":\"/1.杭电生存指南/1.2竞赛指北\"},{\"text\":\"1.3 导师选择\",\"link\":\"/1.杭电生存指南/1.3导师选择\"},{\"text\":\"1.4 小心项目陷阱\",\"link\":\"/1.杭电生存指南/1.4小心项目陷阱\"},{\"text\":\"1.5 小组作业避雷指南\",\"link\":\"/1.杭电生存指南/1.5小组作业避雷指南\"},{\"text\":\"1.6 正确解读GPA\",\"link\":\"/1.杭电生存指南/1.6正确解读GPA\"},{\"text\":\"1.7 杭电出国自救指南\",\"link\":\"/1.杭电生存指南/1.7杭电出国自救指南\"},{\"text\":\"1.8 转专业二三事\",\"link\":\"/1.杭电生存指南/1.8转专业二三事\"},{\"text\":\"1.9 问题专题:好想进入实验室\",\"link\":\"/1.杭电生存指南/1.9问题专题:好想进入实验室\"},{\"text\":\"1.10 如何读论文\",\"link\":\"/1.杭电生存指南/1.10如何读论文\"},{\"text\":\"1.11 陷入虚无主义?进来看看吧\",\"link\":\"/1.杭电生存指南/1.11陷入虚无主义?进来看看吧\"},{\"text\":\"1.12 选课原则与抢课技巧\",\"link\":\"/1.杭电生存指南/1.12选课原则与抢课技巧\"},{\"text\":\"1.13 数学学习篇\",\"link\":\"/1.杭电生存指南/1.13数学学习篇\"},{\"text\":\"1.14 杭电“失败”指南\",\"link\":\"/1.杭电生存指南/1.14 杭电失败指南\"}]},{\"text\":\"贡献者\",\"link\":\"/contributors\"},{\"text\":\"贡献指南\",\"link\":\"/CONTRIBUTING\"}],\"/技术资源汇总(杭电支持版)/\":[{\"text\":\"2.高效学习\",\"collapsed\":true,\"items\":[{\"text\":\"2.高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"2.1高效的前提:摆脱高中思维\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1高效的前提:摆脱高中思维\"},{\"text\":\"2.2优雅的使用工具\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.2优雅的使用工具\"},{\"text\":\"2.3高效的信息检索\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3高效的信息检索\"},{\"text\":\"2.4优雅的记笔记\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.4优雅的记笔记\"},{\"text\":\"2.5以理工科的方式阅读英语\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.5以理工科的方式阅读英语\"},{\"text\":\"2.6学会使用AI辅助学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.6学会使用AI辅助学习\"}]},{\"text\":\"3.编程思维体系构建\",\"collapsed\":true,\"items\":[{\"text\":\"3.编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"3.0 编程入门之道\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.0 编程入门之道\"},{\"text\":\"3.1该使用哪个编辑器???\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.1该使用哪个编辑器???\"},{\"text\":\"3.2算法杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2算法杂谈\"},{\"text\":\"3.3如何选择编程语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.3如何选择编程语言\"},{\"text\":\"3.4C语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4C语言\"},{\"text\":\"3.5git与github\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.5git与github\"},{\"text\":\"3.6Python(灵巧的胶水)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6Python(灵巧的胶水)\"},{\"text\":\"3.X 聊聊设计模式和程序设计\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.X 聊聊设计模式和程序设计\"},{\"text\":\"3.Y 附加模块Linux\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y 附加模块Linux\"}]},{\"text\":\"4.人工智能\",\"collapsed\":true,\"items\":[{\"text\":\"4.人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"4.1前言\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.1前言\"},{\"text\":\"4.2机器学习AI快速入门quick start\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.2机器学习AI快速入门quick start\"},{\"text\":\"4.3人工智能导论及机器学习入门\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3人工智能导论及机器学习入门\"},{\"text\":\"4.4FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.4FAQ:常见问题\"},{\"text\":\"4.5图网络略述intro&GCN\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.5图网络略述intro&GCN\"},{\"text\":\"4.6数据分析\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.6数据分析\"},{\"text\":\"4.7如何做研究\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.7如何做研究\"},{\"text\":\"4.8科研论文写作\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.8科研论文写作\"},{\"text\":\"4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\"},{\"text\":\"4.10LLM Agent之结构化输出\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.10LLMAgent之结构化输出\"},{\"text\":\"4.11本章节内容的局限性\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.11本章节内容的局限性\"}]},{\"text\":\"5.富有生命的嵌入式\",\"collapsed\":true,\"items\":[{\"text\":\"5.富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"5.1嵌入式是什么?可以吃吗?\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?\"},{\"text\":\"5.2New meaning of C\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.2New meaning of C\"},{\"text\":\"5.3还玩裸机?上操作系统!\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!\"}]},{\"text\":\"6.计算机安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"6.1Web安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1Web安全\"},{\"text\":\"6.2二进制安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2二进制安全\"},{\"text\":\"6.3密码学\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.3密码学\"},{\"text\":\"6.4安全杂项\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.4安全杂项\"},{\"text\":\"6.5学习资料推荐\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.5学习资料推荐\"}]},{\"text\":\"7.网络应用开发入门\",\"collapsed\":true,\"items\":[{\"text\":\"7.网络应用开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发入门\"},{\"text\":\"7.1WEB开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.1WEB开发入门\"},{\"text\":\"7.2前端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.1基础(三件套)\"},{\"text\":\"7.3后端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.1基础部分\"}]},{\"text\":\"8.基础学科\",\"collapsed\":true,\"items\":[{\"text\":\"8.基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"8.1经济学科普Part1\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.1经济学科普Part1\"}]},{\"text\":\"9.计算机网络\",\"collapsed\":true,\"items\":[{\"text\":\"9.计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"},{\"text\":\"9.1 计网速通\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.1计网速通\"}]}],\"/技术资源汇总(杭电支持版)/2.高效学习/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"2.高效学习\",\"collapsed\":false,\"items\":[{\"text\":\"2.高效学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.高效学习\"},{\"text\":\"2.1高效的前提:摆脱高中思维\",\"collapsed\":true,\"items\":[{\"text\":\"2.1高效的前提:摆脱高中思维\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1高效的前提:摆脱高中思维\"},{\"text\":\"2.1.1悲壮的学习方式\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.1悲壮的学习方式\"},{\"text\":\"2.1.2浮躁的心理状态\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.2浮躁的心理状态\"},{\"text\":\"2.1.3错误的提问姿态\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.3错误的提问姿态\"},{\"text\":\"2.1.4书籍的盲目崇拜\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.4书籍的盲目崇拜\"},{\"text\":\"2.1.5错误的学习配比\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.1.5错误的学习配比\"}]},{\"text\":\"2.2优雅的使用工具\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.2优雅的使用工具\"},{\"text\":\"2.3高效的信息检索\",\"collapsed\":true,\"items\":[{\"text\":\"2.3高效的信息检索\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3高效的信息检索\"},{\"text\":\"2.3.1阅读文档B百度爬\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.1阅读文档B百度爬\"},{\"text\":\"2.3.2检索论文核心内容\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.2检索论文核心内容\"},{\"text\":\"2.3.3优秀的开源社区\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.3.3优秀的开源社区\"},{\"text\":\"补充:为什么不要用百度\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/补充:为什么不要用百度\"}]},{\"text\":\"2.4优雅的记笔记\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.4优雅的记笔记\"},{\"text\":\"2.5以理工科的方式阅读英语\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.5以理工科的方式阅读英语\"},{\"text\":\"2.6学会使用AI辅助学习\",\"link\":\"/技术资源汇总(杭电支持版)/2.高效学习/2.6学会使用AI辅助学习\"}]}],\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"3.编程思维体系构建\",\"collapsed\":false,\"items\":[{\"text\":\"3.编程思维体系构建\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.编程思维体系构建\"},{\"text\":\"3.0 编程入门之道\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.0 编程入门之道\"},{\"text\":\"3.1该使用哪个编辑器???\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.1该使用哪个编辑器???\"},{\"text\":\"3.2算法杂谈\",\"collapsed\":true,\"items\":[{\"text\":\"3.2算法杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2算法杂谈\"},{\"text\":\"3.2.1手把手教你学算法——如何使用OJOnline Judge\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2.1手把手教你学算法——如何使用OJOnline Judge\"},{\"text\":\"3.2.2ACM 竞赛从入门到入坟\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.2.2ACM 竞赛从入门到入坟\"}]},{\"text\":\"3.3如何选择编程语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.3如何选择编程语言\"},{\"text\":\"3.4C语言\",\"collapsed\":true,\"items\":[{\"text\":\"3.4C语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4C语言\"},{\"text\":\"3.4.1FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.1FAQ:常见问题\"},{\"text\":\"3.4.2用什么写 C 语言\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.2用什么写 C 语言\"},{\"text\":\"3.4.3解决编程问题的普适性过程\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.3解决编程问题的普适性过程\"},{\"text\":\"3.4.4C语言前置概念学习\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.4C语言前置概念学习\"},{\"text\":\"3.4.5阶段一:编程属性\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.5阶段一:编程属性\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.5阶段一:编程属性\"},{\"text\":\"3.4.5.1C语言自测标准——链表\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.5.1C语言自测标准——链表\"}]},{\"text\":\"3.4.6阶段二文字冒险cool\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.6阶段二文字冒险cool\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6阶段二文字冒险cool\"},{\"text\":\"3.4.6.1.开始冒险\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.1.开始冒险\"},{\"text\":\"3.4.6.2.探索未知\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.2.探索未知\"},{\"text\":\"3.4.6.3.指明地点\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.3.指明地点\"},{\"text\":\"3.4.6.4.创建对象\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.4.创建对象\"},{\"text\":\"3.4.6.5.捡起物品\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.5.捡起物品\"},{\"text\":\"3.4.6.6.绘制地图\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.6.绘制地图\"},{\"text\":\"3.4.6.7.增大距离\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.7.增大距离\"},{\"text\":\"3.4.6.8.移动方向\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.8.移动方向\"},{\"text\":\"3.4.6.9.练习:生成代码\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.9.练习:生成代码\"},{\"text\":\"3.4.6.10.增添属性\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.10.增添属性\"},{\"text\":\"3.4.6.11.设置条件\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.11.设置条件\"},{\"text\":\"3.4.6.12.开启关闭\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.12.开启关闭\"},{\"text\":\"3.4.6.13.编写解析器\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.13.编写解析器\"},{\"text\":\"3.4.6.14.丰富命令\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.14.丰富命令\"},{\"text\":\"3.4.6.15.赋予明暗\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.15.赋予明暗\"},{\"text\":\"3.4.6.16.结语:你终将自由\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.6.16.结语:你终将自由\"}]},{\"text\":\"3.4.7C基础知识杂谈\",\"collapsed\":true,\"items\":[{\"text\":\"3.4.7C基础知识杂谈\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7C基础知识杂谈\"},{\"text\":\"3.4.7.1GDB初探索(编程可阅览)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)\"},{\"text\":\"3.4.7.1.1调试理论\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.1.1调试理论\"},{\"text\":\"3.4.7.2C的历史问题undefined behavior\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.2C的历史问题undefined behavior\"},{\"text\":\"3.4.7.3C编译器干了什么\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.3C编译器干了什么\"},{\"text\":\"3.4.7.4Inline Assembly与链接加载\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载\"}]}]},{\"text\":\"3.5git与github\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.5git与github\"},{\"text\":\"3.6Python(灵巧的胶水)\",\"collapsed\":true,\"items\":[{\"text\":\"3.6Python(灵巧的胶水)\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6Python(灵巧的胶水)\"},{\"text\":\"3.6.1从CS61A看编程语言学习\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.1从CS61A看编程语言学习\"},{\"text\":\"3.6.2环境配置\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.2环境配置\"},{\"text\":\"3.6.3安装python\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.3安装python\"},{\"text\":\"3.6.4Python for fun\",\"collapsed\":true,\"items\":[{\"text\":\"3.6.4Python for fun\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4Python for fun\"},{\"text\":\"3.6.4.0阶段零Python解释器\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.0阶段零Python解释器\"},{\"text\":\"3.6.4.1阶段一:熟悉语句\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句\"},{\"text\":\"3.6.4.2阶段二:递归操作\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.2阶段二:递归操作\"},{\"text\":\"3.6.4.3阶段三:数据抽象\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.3阶段三:数据抽象\"},{\"text\":\"3.6.4.4阶段四:高阶函数\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.4阶段四:高阶函数\"},{\"text\":\"3.6.4.5阶段五:迭代生成\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.5阶段五:迭代生成\"},{\"text\":\"3.6.4.6结语\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.6.4.6结语\"}]}]},{\"text\":\"3.X 聊聊设计模式和程序设计\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.X 聊聊设计模式和程序设计\"},{\"text\":\"3.Y 附加模块Linux\",\"collapsed\":true,\"items\":[{\"text\":\"3.Y 附加模块Linux\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y 附加模块Linux\"},{\"text\":\"3.Y.1Linux概念普及\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.1Linux概念普及\"},{\"text\":\"3.Y.2双系统安装和发行版推荐\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.2双系统安装和发行版推荐\"},{\"text\":\"3.Y.3VMware的安装与安装Ubuntu22.04系统\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.3VMware的安装与安装Ubuntu22.04系统\"},{\"text\":\"3.Y.4WSL的安装\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.4WSL的安装\"},{\"text\":\"3.Y.5Linux初探索\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.5Linux初探索\"},{\"text\":\"3.Y.6Vim初探索\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.6Vim初探索\"},{\"text\":\"3.Y.7linux小任务\",\"link\":\"/技术资源汇总(杭电支持版)/3.编程思维体系构建/3.Y.7linux小任务\"}]}]}],\"/技术资源汇总(杭电支持版)/4.人工智能/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"4.人工智能\",\"collapsed\":false,\"items\":[{\"text\":\"4.人工智能\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.人工智能\"},{\"text\":\"4.1前言\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.1前言\"},{\"text\":\"4.2机器学习AI快速入门quick start\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.2机器学习AI快速入门quick start\"},{\"text\":\"4.3人工智能导论及机器学习入门\",\"collapsed\":true,\"items\":[{\"text\":\"4.3人工智能导论及机器学习入门\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3人工智能导论及机器学习入门\"},{\"text\":\"4.3.1搜索\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.1搜索\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1搜索\"},{\"text\":\"4.3.1.1程序示例——maze迷宫解搜索\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索\"},{\"text\":\"4.3.1.2项目Tic-Tac-Toe井字棋\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.1.2项目Tic-Tac-Toe井字棋\"}]},{\"text\":\"4.3.2知识推理\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.2知识推理\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2知识推理\"},{\"text\":\"4.3.2.1程序示例——命题逻辑与模型检测\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测\"},{\"text\":\"4.3.2.2项目:扫雷,骑士与流氓问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题\"}]},{\"text\":\"4.3.3不确定性问题\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.3不确定性问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3不确定性问题\"},{\"text\":\"4.3.3.1程序示例\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3.1程序示例\"},{\"text\":\"4.3.3.2项目:遗传\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.3.2项目:遗传\"}]},{\"text\":\"4.3.4最优化\",\"collapsed\":true,\"items\":[{\"text\":\"4.3.4最优化\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4最优化\"},{\"text\":\"4.3.4.1程序示例\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4.1程序示例\"},{\"text\":\"4.3.4.2项目:填词游戏\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.3.4.2项目:填词游戏\"}]}]},{\"text\":\"4.4FAQ:常见问题\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.4FAQ:常见问题\"},{\"text\":\"4.5图网络略述intro&GCN\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.5图网络略述intro&GCN\"},{\"text\":\"4.6数据分析\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.6数据分析\"},{\"text\":\"4.7如何做研究\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.7如何做研究\"},{\"text\":\"4.8科研论文写作\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.8科研论文写作\"},{\"text\":\"4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.9从 AI 到 智能系统 —— 从 LLMs 到 Agents\"},{\"text\":\"4.10LLM Agent之结构化输出\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.10LLMAgent之结构化输出\"},{\"text\":\"4.11本章节内容的局限性\",\"link\":\"/技术资源汇总(杭电支持版)/4.人工智能/4.11本章节内容的局限性\"}]}],\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"5.富有生命的嵌入式\",\"collapsed\":false,\"items\":[{\"text\":\"5.富有生命的嵌入式\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.富有生命的嵌入式\"},{\"text\":\"5.1嵌入式是什么?可以吃吗?\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?\"},{\"text\":\"5.2New meaning of C\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.2New meaning of C\"},{\"text\":\"5.3还玩裸机?上操作系统!\",\"link\":\"/技术资源汇总(杭电支持版)/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!\"}]}],\"/技术资源汇总(杭电支持版)/6.计算机安全/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"6.计算机安全\",\"collapsed\":false,\"items\":[{\"text\":\"6.计算机安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.计算机安全\"},{\"text\":\"6.1Web安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.1Web安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1Web安全\"},{\"text\":\"6.1.1SQL 注入\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.1.1SQL 注入\"}]},{\"text\":\"6.2二进制安全\",\"collapsed\":true,\"items\":[{\"text\":\"6.2二进制安全\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2二进制安全\"},{\"text\":\"6.2.1基础工具的使用\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.1基础工具的使用\"},{\"text\":\"6.2.2软件破解、软件加固\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.2软件破解、软件加固\"},{\"text\":\"6.2.3漏洞挖掘、漏洞利用\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.2.3漏洞挖掘、漏洞利用\"}]},{\"text\":\"6.3密码学\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.3密码学\"},{\"text\":\"6.4安全杂项\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.4安全杂项\"},{\"text\":\"6.5学习资料推荐\",\"link\":\"/技术资源汇总(杭电支持版)/6.计算机安全/6.5学习资料推荐\"}]}],\"/技术资源汇总(杭电支持版)/7.网络应用开发/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"7.网络应用开发\",\"collapsed\":false,\"items\":[{\"text\":\"7.网络应用开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.网络应用开发入门\"},{\"text\":\"7.1WEB开发入门\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.1WEB开发入门\"},{\"text\":\"7.2前端部分\",\"collapsed\":true,\"items\":[{\"text\":\"7.2.1基础(三件套)\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.1基础(三件套)\"},{\"text\":\"7.2.2进阶(小项目)\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.2进阶(小项目)\"},{\"text\":\"7.2.3附录1前端介绍详细版\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.3附录1前端介绍详细版\"},{\"text\":\"7.2.4附录2大前端开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.4附录2大前端开发\"},{\"text\":\"7.2.5附录3跨端开发\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.2.5附录3跨端开发\"}]},{\"text\":\"7.3后端部分\",\"collapsed\":true,\"items\":[{\"text\":\"7.3后端部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3后端部分\"},{\"text\":\"7.3.1基础部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.1基础部分\"},{\"text\":\"7.3.2进阶部分\",\"link\":\"/技术资源汇总(杭电支持版)/7.网络应用开发/7.3.2进阶部分\"}]}]}],\"/技术资源汇总(杭电支持版)/8.基础学科/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"8.基础学科\",\"collapsed\":false,\"items\":[{\"text\":\"8.基础学科\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.基础学科\"},{\"text\":\"8.1经济学科普Part1\",\"link\":\"/技术资源汇总(杭电支持版)/8.基础学科/8.1经济学科普Part1\"}]}],\"/技术资源汇总(杭电支持版)/9.计算机网络/\":[{\"text\":\"返回上一层\",\"link\":\"/技术资源汇总(杭电支持版)/内容索引\"},{\"text\":\"9.计算机网络\",\"collapsed\":false,\"items\":[{\"text\":\"9 计算机网络\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.计算机网络\"},{\"text\":\"9.1 计网速通\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.1计网速通\"},{\"text\":\"9.2.1 物理层(待完成)\"},{\"text\":\"9.2.2 链路层(待完成)\"},{\"text\":\"9.2.3 网络层\",\"collapsed\":true,\"items\":[{\"text\":\"9.2.3 网络层\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3网络层\"},{\"text\":\"9.2.3.1 IP 协议\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3.1IP协议\"},{\"text\":\"9.2.3.2 子网与无类域间路由\",\"link\":\"/技术资源汇总(杭电支持版)/9.计算机网络/9.2.3.2子网与无类域间路由\"}]}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://gitea.xinxijishubu.asia/moyin/fzu-product\"}],\"search\":{\"provider\":\"local\"},\"footer\":{\"message\":\"Made with ❤️ by ALL 协作者\",\"copyright\":\"Copyright © 2023-present Evan You && ALL 协作者\"},\"lastUpdatedText\":\"上次更改\",\"docFooter\":{\"prev\":\"上一小节\",\"next\":\"下一小节\"},\"editLink\":{\"pattern\":\"https://gitea.xinxijishubu.asia/moyin/fzu-product/src/branch/main/:path\",\"text\":\"在 Gitea 上修改此页\"},\"externalLinkIcon\":true},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>