chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于編程的那些事

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:Java建設(shè)者 ? 作者:Java建設(shè)者 ? 2020-09-15 11:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來自公眾號(hào):Java建設(shè)者

為什么這本書叫做龍書(Dragon book)?

這本書很有意思,它的書名是《Compilers: Principles, Techniques, and Tools》,也就是編譯器的原則、技術(shù)和工具。但它卻畫出了一個(gè)恐龍和騎士,恐龍身上寫的是Complexity of Compiler Design,也就是復(fù)雜的編譯器設(shè)計(jì),騎士的盾上寫的是Syntax Directed Granslation,也就是語(yǔ)法翻譯。騎士的劍上看的不是很清楚,我猜測(cè)應(yīng)該是優(yōu)秀的編譯器的意思。這是征服復(fù)雜性的隱喻。優(yōu)秀的編譯器會(huì)直接征服復(fù)雜的編譯,復(fù)雜的編譯設(shè)計(jì)永遠(yuǎn)無法攻破語(yǔ)法翻譯。

什么是編譯原理

計(jì)算機(jī)是只認(rèn)識(shí)二進(jìn)制的,但是我們平常開發(fā)中根本不會(huì)使用二進(jìn)制進(jìn)行開發(fā),我們使用的都是 Java、C 這類的高級(jí)語(yǔ)言,每種語(yǔ)言都會(huì)經(jīng)過一系列的轉(zhuǎn)換才能被計(jì)算機(jī)識(shí)別,那么到底是誰做的這項(xiàng)工作呢?一個(gè)被稱為編譯器(compiler)的大佬出場(chǎng)了。

語(yǔ)言處理器

首先考慮一下一個(gè)例子,你如何才能和老外對(duì)話?你是不是需要學(xué)英語(yǔ)?我們有一些同學(xué)可能認(rèn)為英語(yǔ)難學(xué),經(jīng)常會(huì)在英語(yǔ)書上做一些漢語(yǔ)標(biāo)記方便理解。

那么,誰做了由英語(yǔ)到方便記憶的英語(yǔ)之間的轉(zhuǎn)換呢?答案是你的大腦。所以,我們可以歸納一下這個(gè)過程。

因?yàn)槲覀兌疂h語(yǔ)(自己的一套語(yǔ)法規(guī)則),我們把英語(yǔ)(需要學(xué)習(xí)的語(yǔ)言)轉(zhuǎn)換為我們便于理解的漢語(yǔ)(大腦翻譯規(guī)則),我們才能學(xué)會(huì)英語(yǔ)和老外對(duì)話(轉(zhuǎn)換為目標(biāo)語(yǔ)言)。

這里我說一點(diǎn):昨天晚上外出遛狗有個(gè)老黑和中國(guó)女生對(duì)話,中國(guó)女生竟然講英文??????這可是中國(guó)本土好么,為什么外國(guó)人來到中國(guó)不講漢語(yǔ)偏要中國(guó)人講英文???你去外國(guó)旅游你會(huì)講中文嗎???這是一個(gè)基本認(rèn)知問題,別怪我偏執(zhí)。我認(rèn)為外國(guó)人要來我們國(guó)家最基本的一點(diǎn)就是:你要學(xué)中文,千萬不要抱著英語(yǔ)為上的心態(tài),漢語(yǔ)不輸任何語(yǔ)言。

回到正題,我們上面舉出的這個(gè)學(xué)英語(yǔ)的例子,其實(shí)就是一個(gè)由原程序經(jīng)過某種機(jī)制轉(zhuǎn)換,把它變成目標(biāo)語(yǔ)言的過程。也就是

編譯器就是一個(gè)翻譯官的角色,它負(fù)責(zé)把源程序的語(yǔ)法翻譯成目標(biāo)程序能夠理解的語(yǔ)法。

回到計(jì)算機(jī)中,我們肯定需要目標(biāo)程序來做一些事情的。

也就是,我們通過某個(gè)渠道獲得的輸入信息,會(huì)經(jīng)過編譯器的轉(zhuǎn)換,變?yōu)檩敵鲂畔⑦M(jìn)行展示。

除了編譯器之外,還有一種稱為解釋器(interpreter)的語(yǔ)言處理器,它不是做翻譯工作的,而是把用戶提供的輸入執(zhí)行源程序中指定的操作。

我們熟知的 Java 語(yǔ)言,就結(jié)合了編譯和解釋的過程,我們寫的 Java 源文件首先被編譯成字節(jié)碼(bytecode),字節(jié)碼是一種中間碼,它通常被看成是可執(zhí)行的二進(jìn)制文件。然后再由 Java 虛擬機(jī)對(duì)字節(jié)碼解釋執(zhí)行。這樣,在一臺(tái)機(jī)器上編譯的字節(jié)碼就能夠在其他機(jī)器上解釋執(zhí)行,這種體現(xiàn)了 Java 語(yǔ)言的平臺(tái)無關(guān)性。

為了提高編譯速度,Java 中有一種just-in-time,JIT即時(shí)編譯器會(huì)一邊編譯一邊執(zhí)行。

一個(gè)源文件程序可能被劃分為多個(gè)模塊,并存放在多個(gè)文件中,還需要把文件鏈接在一起,所以,除了編譯器之外,還需要一種能鏈接文件的部件參與,預(yù)處理器(preprossor)是做這件事情的。如下圖所示

預(yù)處理器經(jīng)過預(yù)處理后會(huì)作為輸入傳遞給編譯器,編譯器對(duì)源程序進(jìn)行編譯,編譯完成后生成匯編代碼,作為匯編器的輸入傳遞給匯編器,匯編器進(jìn)行匯編處理轉(zhuǎn)換為機(jī)器代碼,注意這個(gè)時(shí)候還不是目標(biāo)代碼,還要經(jīng)過鏈接器與系統(tǒng)庫(kù)函數(shù)進(jìn)行鏈接,最后由加載器把目標(biāo)代碼加載到內(nèi)存中執(zhí)行

編譯器的結(jié)構(gòu)

我們上面大概了解了一下語(yǔ)言的處理過程,下面我們就來了解一下編譯器的內(nèi)部結(jié)構(gòu),編譯器內(nèi)部其實(shí)具有兩種結(jié)構(gòu):分析(analysis)部分和整合(synthesis)部分。

分析過程相當(dāng)于是把源程序分成多個(gè)結(jié)構(gòu),每個(gè)結(jié)構(gòu)都有特定的語(yǔ)法格式進(jìn)行校驗(yàn),在經(jīng)由每個(gè)校驗(yàn)后,如果不滿足指定的語(yǔ)法格式則進(jìn)行提醒,使用戶進(jìn)行修改。分析部分還會(huì)收集有關(guān)源程序的信息,會(huì)把收集到的信息存放在一個(gè)被稱為符號(hào)表(symbol table)的數(shù)據(jù)結(jié)構(gòu)中。符號(hào)表和中間表示形式一起傳給整合部分。

整合過程是根據(jù)分析過程傳遞的信息來構(gòu)造用戶期待的目標(biāo)程序。分析和整合統(tǒng)稱為前端(front end)和后端(back end),哈哈哈哈。

這里你需要知道符號(hào)表(Symbol Table)的概念:符號(hào)表是編譯器使用和維護(hù)的數(shù)據(jù)結(jié)構(gòu),由標(biāo)識(shí)符和類型組成。符號(hào)表的主要作用是幫助編譯器快速定位。

下面是一個(gè)編譯器的典型結(jié)構(gòu)

下面我們就針對(duì)編譯器結(jié)構(gòu)的每一層進(jìn)行描述和討論

詞法分析

詞法分析(Lexical Analyzer)是編譯器的第一個(gè)步驟,它也被稱為掃描(scanning)。詞法分析器通過讀入外部的字符流對(duì)其進(jìn)行掃描,并且把它們組成有意義的詞素(lexeme)序列,對(duì)于每個(gè)詞素,詞法分析器都會(huì)產(chǎn)生詞法單元(token)作為輸出。這個(gè)詞法單元會(huì)傳遞給下一個(gè)步驟,也就是語(yǔ)法分析。

這里需要解釋一下 Token 、詞素和詞法分析器的概念

我們常用的編程語(yǔ)言就是具有詞素的單詞和符號(hào)的集合,比如 C 語(yǔ)言中有 (),-> 等等。關(guān)鍵字 if...while...,變量或函數(shù)名稱以及數(shù)字和字符串常量也被視為詞素。并不是所有的自負(fù)都屬于詞素,例如空格和注釋就不屬于。

詞法分析器用來分析詞素有兩個(gè)規(guī)則

跳過不能以字母開頭的字符

然后找到剩余的最長(zhǎng)前綴,也就是詞素

這兩句話比較抽象,舉個(gè)例子來說明一下

比如 C 語(yǔ)言中有這么一個(gè)語(yǔ)句

ifx=20*30;

那么第一個(gè)詞素就是 ifx,為什么不是 if 呢?因?yàn)?if 不是最長(zhǎng)的前綴。然后后面的詞素依次是 =,20,*,30和;。

詞素、詞法分析器、token 的關(guān)系如下

詞素是 Token 的實(shí)例,詞法分析器的主要任務(wù)就是從源程序中讀取字符并產(chǎn)生 token。token 也是有結(jié)構(gòu)的,一般結(jié)構(gòu)如下

在詞法分析生成的token中,第一個(gè)詞 token-name 是語(yǔ)法分析期間使用的抽象符號(hào),第二個(gè)詞 attribute-value 指向的是符號(hào)表中關(guān)于這個(gè)詞法單元的條目數(shù)。

我們舉個(gè)例子來看一下詞法分析的拆解過程。

比如現(xiàn)在源程序中有一個(gè)賦值語(yǔ)句

income=mainjob+sideline//收入=主業(yè)+副業(yè)

這個(gè)賦值語(yǔ)句中的字符可以組合成如下詞素,并轉(zhuǎn)換成為 token,并傳遞給語(yǔ)法分析階段。

首先,income 是一個(gè)詞素,它會(huì)被映射為 ,其中 id 是表示的標(biāo)識(shí)符(identifier)的抽象符號(hào),而 1 指的是符號(hào)表中 income 在符號(hào)表中的條數(shù)。

然后是賦值符號(hào) = ,它也是一個(gè)詞素,被映射稱為 token 中的 < = >。這個(gè) token 不需要屬性值,所以沒有第二個(gè)詞。

mainjob 是一個(gè)詞素,它被映射成為 token 中的 ,2 是 mainjob 對(duì)應(yīng)的符號(hào)表?xiàng)l目

+也是一個(gè)詞素,它被映射稱為 < + >,沒有條目數(shù)

sideline 是一個(gè)詞素,它被映射稱為 token 中的 ,3 是 sideline 對(duì)應(yīng)的符號(hào)表?xiàng)l目

所以,經(jīng)過詞法分析后,上面的源程序會(huì)變?yōu)?/p>

在上面的表達(dá)式中, = 和 + 分別表示賦值和加法運(yùn)算符的抽象符號(hào)。用圖來表示的話就是

語(yǔ)法分析

編譯器的第二個(gè)步驟是語(yǔ)法分析(syntax analysis)或者稱為解析(parsing)。語(yǔ)法分析器使用由詞法分析器生成的各個(gè)詞法單元的第一個(gè)分量來創(chuàng)建樹形的中間表示。常用的方法就是語(yǔ)法樹(syntax tree)。編譯器的后續(xù)步驟都會(huì)使用這個(gè)語(yǔ)法結(jié)構(gòu)來幫助分析源程序,并生成目標(biāo)程序。

語(yǔ)義分析

語(yǔ)義分析是由語(yǔ)義分析器(semantic analyzer)完成的,它使用語(yǔ)法樹和符號(hào)表中的信息來檢查源程序是否和語(yǔ)言定義的語(yǔ)義一致。語(yǔ)義分析器也收集類型信息,并把這些信息放在語(yǔ)法樹或者符號(hào)表中,以便后續(xù)的中間代碼生成器使用。

語(yǔ)義分析會(huì)進(jìn)行類型檢查(type checking),這是語(yǔ)義分析器的一個(gè)最重要的功能。編譯器會(huì)檢查每個(gè)運(yùn)算符是否具有匹配的運(yùn)算分量。舉個(gè)例子比如設(shè)計(jì)語(yǔ)言要求一個(gè)數(shù)組的下標(biāo)是整數(shù),如果你用浮點(diǎn)數(shù)作為下標(biāo),編譯器就會(huì)出錯(cuò)。

某些程序設(shè)計(jì)語(yǔ)言比如 Java 會(huì)允許自動(dòng)類型轉(zhuǎn)換(coercion)。如果整數(shù)和浮點(diǎn)數(shù)進(jìn)行運(yùn)算,編譯器會(huì)把整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)。

中間代碼生成

在源程序的語(yǔ)法分析和語(yǔ)義分析完成后,很多編譯器生成一個(gè)明確的低級(jí)類機(jī)器語(yǔ)言的中間表示。我們可以把中間表示形式看作是抽象,中間形式的代碼應(yīng)該具有兩個(gè)重要的性質(zhì):易于生成,并且能夠輕松的被翻譯。一般常用的一種是三地址指令(three-address instructions)的中間表示形式。我們后面會(huì)細(xì)說。

代碼優(yōu)化

代碼優(yōu)化會(huì)試圖改進(jìn)代碼以便生成更好的目標(biāo)代碼。更好通常情況下意味著更快,但是也可能會(huì)有其他目標(biāo),比如更短或能耗更低的目標(biāo)代碼。

代碼生成

代碼生成通過中間代碼作為輸入,并把它映射為目標(biāo)語(yǔ)言。如果目標(biāo)語(yǔ)言是機(jī)器代碼的話,那么必須要為每個(gè)變量分配寄存器或內(nèi)存位置。解釋一下上面的運(yùn)行結(jié)果。

每個(gè)指令的第一個(gè)運(yùn)算分量指定了一個(gè)目標(biāo)地址,各個(gè)指令中的 F 告訴我們它處理的是浮點(diǎn)數(shù), 上面代碼首先把 id3 裝載進(jìn) R2 寄存器中,然后把 id2 裝載進(jìn) R1 寄存器中,再對(duì) R1 目標(biāo)進(jìn)行 R1 和 R2 寄存器相加的操作。最后把寄存器 R1 的值存放到 id1 的地址中。

符號(hào)表管理

我們上面提到了符號(hào)表的概念,它是一個(gè)編譯器很重要的功能。符號(hào)表能夠記錄源程序中使用變量的名稱,并收集和每個(gè)名稱相關(guān)的屬性信息。它相當(dāng)于一個(gè)秘書的作用。符號(hào)表還記錄了每個(gè)變量名字的條目。后面我們會(huì)詳細(xì)的介紹符號(hào)表。

編譯器構(gòu)造工具

和軟件開發(fā)一樣,寫編譯器的人可以充分利用現(xiàn)代的軟件開發(fā)環(huán)境進(jìn)行開發(fā)。通常也有語(yǔ)言編輯器、調(diào)試工具、版本管理、測(cè)試工具等。除此之外,還需要一些更專業(yè)的工具來實(shí)現(xiàn)編輯器不同階段的代碼生成。

一些常用的編譯器構(gòu)造工具有

語(yǔ)法分析器生成器:可以根據(jù)程序設(shè)計(jì)語(yǔ)言的語(yǔ)法描述自動(dòng)生成語(yǔ)法分析器

掃描器生成器:可以根據(jù)一個(gè)語(yǔ)言的語(yǔ)法單元的正則描述生成詞法分析器

語(yǔ)法制導(dǎo)的翻譯引擎:用于生成一組遍歷分析樹并生成中間代碼

代碼生成器:用于把中間代碼轉(zhuǎn)換為目標(biāo)代碼

數(shù)據(jù)流分析引擎:用于分析輸入是如何傳遞到另一部分的

編譯器構(gòu)造工具:提供用于構(gòu)造編譯器不同階段的例程

程序設(shè)計(jì)語(yǔ)言的發(fā)展歷程

計(jì)算機(jī)從 20 世紀(jì) 40 年代創(chuàng)建至今都只能理解二進(jìn)制語(yǔ)言,亙古不變。這個(gè) 0 、 1 組成的序列能夠告訴計(jì)算機(jī)以什么樣的順序執(zhí)行怎樣的運(yùn)算。運(yùn)算本身是很底層的:比如把一個(gè)數(shù)據(jù)從一個(gè)位置進(jìn)行移動(dòng);把兩個(gè)寄存器的內(nèi)容進(jìn)行相加、比較兩個(gè)值,為了避免如此枯燥的運(yùn)算,我們開發(fā)了各種各樣的編程語(yǔ)言,但是計(jì)算機(jī)底層的計(jì)算方式一直沒變,所以學(xué)習(xí)哪個(gè)技術(shù)性價(jià)比高,明白了嗎?下面我們就來一起認(rèn)識(shí)一下程序設(shè)計(jì)語(yǔ)言的歷程。

高級(jí)設(shè)計(jì)語(yǔ)言

首先被開發(fā)出來的是 20 世紀(jì) 50 年代的匯編語(yǔ)言,5 年后發(fā)生了重要的進(jìn)步,用于科學(xué)計(jì)算的Fortran被開發(fā)出來,用于商業(yè)處理的Cobol語(yǔ)言和用于符號(hào)計(jì)算的Lisp語(yǔ)言被開發(fā)出來;然后接下來的時(shí)間,慢慢很多編程語(yǔ)言被開發(fā)出來,比如 C、C++、Java、JavaScript、Python 等。后面還有用于數(shù)據(jù)處理的 SQL 語(yǔ)言。

語(yǔ)言分類

說到給這些編程語(yǔ)言分類,那可是有太多了,不過我們專注一下高頻的分類。

如何完成計(jì)算任務(wù)的語(yǔ)言稱為強(qiáng)制式(imperative)語(yǔ)言,而把程序中指明要進(jìn)行哪些計(jì)算的語(yǔ)言稱為聲明式(declarative)語(yǔ)言。C、C++、Java 這些都是強(qiáng)制式語(yǔ)言,它們能夠改變程序的狀態(tài);聲明式比如 HTML Prolog 等。

馮·諾伊曼語(yǔ)言指的是以馮·諾伊曼計(jì)算機(jī)體系為基礎(chǔ)的編程語(yǔ)言,今天很多編程語(yǔ)言都是馮·諾伊曼語(yǔ)言

面向?qū)ο笳Z(yǔ)言(object-oriented language)是一種描述對(duì)象的語(yǔ)言,比如 C、C++、Java

腳本語(yǔ)言(scripting language)是具有高層次的解釋型語(yǔ)言,它通常把多個(gè)過程粘在一起,比如 JavaScript、Perl、PHP、Python 等。

程序設(shè)計(jì)語(yǔ)言基礎(chǔ)

下面我們主要探討程序設(shè)計(jì)語(yǔ)言的研究中最重要的術(shù)語(yǔ)和它們的區(qū)別,假設(shè)讀者已經(jīng)了解過 C、C++、C#、Java 中任意一種語(yǔ)言。

靜態(tài)和動(dòng)態(tài)的區(qū)別

編譯器需要能夠?qū)Τ绦蜃鞒雠卸ǎ绻Z(yǔ)言能夠讓編譯器靜態(tài)(非運(yùn)行)時(shí)候決定某個(gè)問題,那么我們說這個(gè)語(yǔ)言使用了一種靜態(tài)(static)策略,或者說能夠在編譯時(shí)刻(compile time)決定。如果讓編譯器在運(yùn)行時(shí)決定某個(gè)策略,那么就是動(dòng)態(tài)策略(dynamic policy),或者被認(rèn)為是運(yùn)行時(shí)決定(run time)。

還有一個(gè)問題是聲明的作用域(scope),如果能夠通過閱讀程序就能確定一個(gè)聲明的作用域,那么這個(gè)語(yǔ)言就是靜態(tài)作用域(static scope),或者說是詞法作用域(lexical scope)。否則這個(gè)語(yǔ)言使用的是動(dòng)態(tài)作用域(dynamic scope)。動(dòng)態(tài)作用域的指向?qū)ο笫菐讉€(gè)聲明中的一個(gè),并不惟一。

C 和 Java 都使用了靜態(tài)作用域,比如 Java 中的static關(guān)鍵字,下面是一段代碼示例

publicstaticintx;

這段代碼在創(chuàng)建完成后就能夠確定它的作用域,因?yàn)?static 聲明的變量是類變量,類變量的實(shí)例能確保只有一個(gè)個(gè)(不太清楚的小伙伴可以參考我的這篇文章都說變量有七八種,到底誰是 Java 的親兒子)

如果你去掉了 static ,那么這個(gè)變量的作用域和在內(nèi)存中的分配就無法確定,編譯器無法在運(yùn)行之前確定所有這些位置。

靜態(tài)綁定和動(dòng)態(tài)綁定

同樣的,名字到位置也區(qū)分靜態(tài)綁定和動(dòng)態(tài)綁定,如果能在非運(yùn)行條件下唯一確定名字到位置,那么就是靜態(tài)綁定,如果要在程序運(yùn)行時(shí)才能確定名字和位置的綁定,那么就是動(dòng)態(tài)綁定。

靜態(tài)作用域和塊結(jié)構(gòu)

大多數(shù)編程語(yǔ)言都提供了作用域這么一個(gè)結(jié)構(gòu),比如 Java 中的private,protected,public等關(guān)鍵字的使用,提供了有效的作用域控制。

塊結(jié)構(gòu)也是一種作用域,使用塊結(jié)構(gòu)表示的含義是在塊內(nèi)部(block)作用范圍有效,塊使用{}來界定一個(gè)塊。

這種語(yǔ)法允許在任意函數(shù)或者方法的內(nèi)部嵌入一個(gè)塊,這種嵌套結(jié)構(gòu)也被稱為塊結(jié)構(gòu)(block structure)。

參數(shù)傳遞機(jī)制

參數(shù)傳遞機(jī)制主要描述的是形式參數(shù)和實(shí)際參數(shù)的關(guān)聯(lián)。大多數(shù)編程語(yǔ)言都支持兩種調(diào)用:值傳遞和引用傳遞

值傳遞

在值傳遞(call-by-value)中,會(huì)對(duì)實(shí)參求值或拷貝,這些值被放在屬于被調(diào)用的形式參數(shù)的內(nèi)存位置上,這種調(diào)用方式在 C 和 Java 中都會(huì)使用,值調(diào)用的結(jié)果是,實(shí)參本身不會(huì)改變。但是在 C 中,我們可以傳遞一個(gè)指針,使得變量的值能夠被修改。

引用傳遞

在引用傳遞(call-by-reference)中,實(shí)際參數(shù)的地址作為相應(yīng)的形式參數(shù)的值被傳遞給調(diào)用者。在被調(diào)用者的代碼中使用形式參數(shù),實(shí)現(xiàn)方法是沿著這個(gè)指針找到調(diào)用者指明的內(nèi)存位置。因此,改變實(shí)際參數(shù)相當(dāng)于改變了形式參數(shù)。

原文標(biāo)題:為什么編譯原理被稱為龍書?

文章出處:【微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    144530
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3707

    瀏覽量

    96715

原文標(biāo)題:為什么編譯原理被稱為龍書?

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    有“理”要說清 :智能電能表通訊地址科學(xué)分配!

    關(guān)于智能電表通訊地址的那些
    的頭像 發(fā)表于 08-19 15:57 ?508次閱讀
    有“理”要說清 :智能電能表通訊地址科學(xué)分配!

    勵(lì)可編程交流負(fù)載箱定義介紹

    編程交流負(fù)載箱 是一種先進(jìn)的電力電子測(cè)試設(shè)備,專門設(shè)計(jì)用于在受控條件下精確地模擬、吸收和消耗交流(AC)電能。其核心特性在于“可編程”——用戶可以通過軟件界面(如PC、觸摸屏或通信協(xié)議)靈活地設(shè)定
    的頭像 發(fā)表于 08-04 16:50 ?503次閱讀

    勵(lì)相關(guān)逆變器測(cè)試設(shè)備介紹

    勵(lì)電源測(cè)試系統(tǒng)以 模塊化設(shè)計(jì)、高精度控制及能量回饋技術(shù) 為核心,為新能源、電動(dòng)汽車、工業(yè)電源等領(lǐng)域提供定制測(cè)試解決方案。以下是吉勵(lì)關(guān)于逆變器測(cè)試設(shè)備的整合介紹: ? 一、 模塊化產(chǎn)品系列 1
    的頭像 發(fā)表于 07-30 17:58 ?983次閱讀

    勵(lì)可編程交流恒流源原理及特點(diǎn)介紹

    編程交流恒流源是一種電子測(cè)試設(shè)備,其核心功能是在負(fù)載變化時(shí)保持輸出交流電流的恒定,同時(shí)允許用戶通過編程接口靈活設(shè)定電流值、波形和頻率。以下是其核心要點(diǎn):
    的頭像 發(fā)表于 07-24 18:18 ?416次閱讀
    吉<b class='flag-5'>事</b>勵(lì)可<b class='flag-5'>編程</b>交流恒流源原理及特點(diǎn)介紹

    勵(lì)可編程交流恒流源特點(diǎn)介紹

    在現(xiàn)代電氣測(cè)試領(lǐng)域,精確的電流控制已成為產(chǎn)品質(zhì)量和安全的關(guān)鍵保障。吉勵(lì)電子推出的CCS2000系列可編程交流恒流源憑借其先進(jìn)技術(shù)和可靠性能,正成為斷路器、熔斷器、變壓器等關(guān)鍵電氣元件測(cè)試的首選設(shè)備
    的頭像 發(fā)表于 07-22 17:30 ?409次閱讀
    吉<b class='flag-5'>事</b>勵(lì)可<b class='flag-5'>編程</b>交流恒流源特點(diǎn)介紹

    關(guān)于OFDM 你不知道的那些?#OFDM #5G技術(shù) #通信技術(shù)

    通信技術(shù)
    安泰儀器維修
    發(fā)布于 :2025年06月24日 18:31:22

    ZMC系列標(biāo)準(zhǔn)源:關(guān)于多用表校準(zhǔn)的那些

    ZMC系列標(biāo)準(zhǔn)源具備高精度和優(yōu)異穩(wěn)定性,為數(shù)字多用表校準(zhǔn)提供可靠的標(biāo)準(zhǔn)信號(hào)源。根據(jù)JJF1587-2016校準(zhǔn)規(guī)范要求,ZMC標(biāo)準(zhǔn)源在多用表校準(zhǔn)應(yīng)用中展現(xiàn)出顯著的技術(shù)優(yōu)勢(shì)。數(shù)字多用表的概述數(shù)字多用表是現(xiàn)代電子測(cè)量的核心儀器,能通過數(shù)字顯示屏顯示精確的電壓、電流和電阻等測(cè)量值,相比傳統(tǒng)指針式儀表具有更高的測(cè)量精度和穩(wěn)定性。按顯示位數(shù)分類,從三位半到八位半,每增
    的頭像 發(fā)表于 06-18 11:38 ?651次閱讀
    ZMC系列標(biāo)準(zhǔn)源:<b class='flag-5'>關(guān)于</b>多用表校準(zhǔn)的<b class='flag-5'>那些</b><b class='flag-5'>事</b>

    關(guān)于SFP連接器你必須了解的那些知識(shí)

    關(guān)于SFP連接器你必須了解的那些知識(shí) 一、SFP光籠子的作用及材料組成 1.光籠子的概念與作用 ① 光籠子是什么? SFP Cage(Small Form-factor Pluggable Cage
    的頭像 發(fā)表于 06-17 09:42 ?758次閱讀
    <b class='flag-5'>關(guān)于</b>SFP連接器你必須了解的<b class='flag-5'>那些</b>知識(shí)

    求助 有那些機(jī)構(gòu) 有關(guān)于 GB/T 4706.1 國(guó)標(biāo)的實(shí)操培訓(xùn)

    求助 有那些機(jī)構(gòu) 有關(guān)于 GB/T 4706.1 國(guó)標(biāo)的實(shí)操培訓(xùn)
    發(fā)表于 04-30 16:20

    勵(lì)可編程變頻電源的特性與應(yīng)用

    在當(dāng)今科學(xué)技術(shù)飛速發(fā)展的時(shí)代,可編程交流電源作為一種關(guān)鍵的電力設(shè)備,在工業(yè)生產(chǎn)、科研實(shí)驗(yàn)等諸多領(lǐng)域得到了廣泛的應(yīng)用,為各行業(yè)的發(fā)展提供了強(qiáng)有力的動(dòng)力支持。 可編程交流電源具有許多顯著的特點(diǎn)。 首先
    的頭像 發(fā)表于 04-21 17:18 ?454次閱讀
    吉<b class='flag-5'>事</b>勵(lì)可<b class='flag-5'>編程</b>變頻電源的特性與應(yīng)用

    羅克韋爾攜手百食品加速數(shù)字化轉(zhuǎn)型

    作為工業(yè)自動(dòng)化、信息化和數(shù)字化轉(zhuǎn)型領(lǐng)域的全球領(lǐng)先企業(yè)之一,羅克韋爾自動(dòng)化與百食品(中國(guó))有限公司(簡(jiǎn)稱“百食品”)于近日成功舉辦了為期三天的研學(xué)活動(dòng),羅克韋爾各部門技術(shù)專家與百食品多工廠技術(shù)人員積極參與。
    的頭像 發(fā)表于 04-14 09:22 ?628次閱讀

    Stellar P6 SARADC模塊,Internal channel/Test channel/External channel的都有那些區(qū)別呢?

    關(guān)于SARADC模塊,請(qǐng)問Internal channel/Test channel/External channel的都有那些區(qū)別呢 ,應(yīng)用場(chǎng)景有何不同。Supervisor ADC和普通ADC怎么配合使用呢?
    發(fā)表于 03-12 07:34

    光伏電站智能運(yùn)維系統(tǒng)解決電站運(yùn)維的那些頭疼

    光伏電站智能運(yùn)維系統(tǒng)解決電站運(yùn)維的那些頭疼 在廣袤的戈壁灘上,一排排深藍(lán)色的光伏板像沉默的巨人,將陽(yáng)光轉(zhuǎn)化為清潔電力。但您知道嗎?這些看似躺著就能賺錢的設(shè)備,其實(shí)需要像照顧孩子一樣細(xì)心呵護(hù)。傳統(tǒng)運(yùn)
    的頭像 發(fā)表于 02-27 16:12 ?584次閱讀
    光伏電站智能運(yùn)維系統(tǒng)解決電站運(yùn)維的<b class='flag-5'>那些</b>頭疼<b class='flag-5'>事</b>

    鴻蒙原生開發(fā)手記:05-開發(fā)之外的那些

    導(dǎo)語(yǔ) 整個(gè)應(yīng)用從開發(fā)到上架需要一系列工作,包括域名注冊(cè)、ICP備案、開通開發(fā)者賬戶、App備案,開發(fā)、測(cè)試、上架、審核以及推廣等 域名 在域名服務(wù)商注冊(cè)和購(gòu)買域名,個(gè)人或公司優(yōu)先選擇.com類的域名,像.org等特定的域名謹(jǐn)慎購(gòu)買,備案有相應(yīng)的資質(zhì)或者審批條件,有的后綴域名可能那個(gè)無法備案。特殊域名建議查詢工信部網(wǎng)站核實(shí)是否支持備案。 備案 首先選擇個(gè)人備案還是企業(yè)備案。域名購(gòu)買后需要實(shí)名認(rèn)證,認(rèn)證信息需與備案保持一致,如兩者不同,則需要先變更域名實(shí)名信息。 備案類別有多種,包括域名備案,App備案,小程序備案等,鴻蒙元服務(wù)備案目前按App備案處理,兩者流程一致。 這里講一下如何企業(yè)備案,登錄運(yùn)營(yíng)商的備案系統(tǒng),如阿里云,進(jìn)入備案,填寫企業(yè)信息,企業(yè)法人證件信息和證件照,網(wǎng)站/App負(fù)責(zé)人證件信息和證件照,同時(shí)驗(yàn)證兩個(gè)手機(jī)號(hào)碼。 如果是App備案,需要填寫應(yīng)用信息,應(yīng)用名稱、包名、圖標(biāo)、指紋和簽名信息等,需要注意的是應(yīng)名稱和包名要和上架的保持一致,否則審核會(huì)拒。 提交信息以后,備案服務(wù)商會(huì)打電話核實(shí)信息,阿里云會(huì)詢問本人身份證號(hào)后六位。 服務(wù)商審核通過后,會(huì)將備案信息提交到工信部,屆時(shí)會(huì)收到一條短信,此時(shí)登錄工信部網(wǎng)站,填寫企業(yè)法人身份證號(hào)后6位和負(fù)責(zé)人后6位,以及這個(gè)驗(yàn)證碼,核驗(yàn)通過后即可。 不同地區(qū)的管局要求不一樣,有的地區(qū)要求網(wǎng)站/App負(fù)責(zé)人必須是本人,有的則不做要求,可以提取詢問備案服務(wù)商。 設(shè)備 華為手機(jī)價(jià)格不菲,對(duì)有的開發(fā)者來說,如果主力機(jī)不是華為,則可能是一筆不小的開支。這里需要根據(jù)自身情況來做決定。 如果只使用ArkTs開發(fā)原生鴻蒙應(yīng)用,可以考慮使用模擬器,大部分常見可以滿足要求,模擬器可用性高。 如果適應(yīng)了跨端開發(fā)框架,如 Flutter,或者設(shè)計(jì)到與系統(tǒng)底層api交互,或操作硬件,則需要考慮配備真機(jī)。 對(duì)于設(shè)備,優(yōu)選mate60系列,包括mate60,mate60pro等,價(jià)格不敏感考慮mate70及新機(jī)型。其次考慮nova系列再次考慮MatePad等。新機(jī)覺得貴可以考慮閑魚二手,購(gòu)機(jī)前確認(rèn)可以正常升級(jí)到NEXT。查詢開發(fā)者官網(wǎng)的升級(jí)計(jì)劃,確保機(jī)型支持Next, ,詢問賣家系統(tǒng)無鎖,可以正常升級(jí)嘗鮮。 目前大部分應(yīng)用優(yōu)先適配手機(jī)端,matepad上的應(yīng)用較少,即使用來開發(fā),兩者在感知上也有一定區(qū)別,涉及到屏幕尺寸適配,尤其需要注意,必然審核過程中,容易遭拒。 開發(fā)測(cè)試 為了提升開發(fā)效率,可以使用預(yù)覽功能,實(shí)時(shí)預(yù)覽當(dāng)前開發(fā)的頁(yè)面或組件,等模塊開發(fā)完成,再用模擬器或真機(jī)進(jìn)行調(diào)試。 開啟熱重載,默認(rèn)IDE沒有開啟,如果需要使用,則先修改運(yùn)營(yíng)配置,然后手動(dòng)點(diǎn)擊 H熱重載圖標(biāo)。如果要在保存是自動(dòng)刷新,則在設(shè)置里,找到 Auto Save,在里面啟用。 應(yīng)用如果需要訪問網(wǎng)絡(luò),在module.json5文件中配置網(wǎng)絡(luò)訪問權(quán)限。對(duì)于元服務(wù),還需要在設(shè)備的開發(fā)者選項(xiàng)中開啟“開發(fā)中元服務(wù)豁免管控”,上架時(shí),在AGC的項(xiàng)目配置中配置好請(qǐng)求域名。 上架審核 上架時(shí),如果你勾選了適配平板,確保你在平板上測(cè)試過,或者你有足夠把我不存在適配問題了。審核人員會(huì)使用平板仔細(xì)檢查你的應(yīng)用,一旦發(fā)現(xiàn)問題,應(yīng)用亦無法上架。 可以提供自測(cè)錄屏,提高審核通過率。如果應(yīng)用在設(shè)計(jì)上,或者使用上有特殊之處,最好在備注項(xiàng)詳細(xì)說明原因,以便審核人員充分理解。 上架時(shí)各項(xiàng)信息如實(shí)填寫,應(yīng)用分類和標(biāo)簽也要得當(dāng),打包使用生產(chǎn)證書,上傳包和勾選時(shí)時(shí)不要搞錯(cuò)版本,AGC上不使用的軟件包即使刪除,避免混淆。填寫信息時(shí)即使點(diǎn)擊保存,避免因引導(dǎo)時(shí)的網(wǎng)頁(yè)跳轉(zhuǎn)造成信息丟失。 提交成功后,首先系統(tǒng)進(jìn)行預(yù)審核,這個(gè)屬于機(jī)機(jī)審,大約等待一兩個(gè)小時(shí),審核通過或不通過都會(huì)收到通知郵件。然后進(jìn)入比較長(zhǎng)的審核等待期,審核時(shí)間一般是工作日時(shí)間,包含周六,周日不審。據(jù)此可以合理安排提審時(shí)間,提早提交排隊(duì)審核。 公測(cè)版本與正式版本是相同的審核流程,彼此獨(dú)立。 每一次提交,審核人員可能不同,發(fā)現(xiàn)的問題也許不同,因人而異,因時(shí)而異。 應(yīng)用第一次上架,審核相對(duì)寬松,再次升級(jí)提審,則可能愈加嚴(yán)格。 參考資料 https://domain.miit.gov.cn/
    發(fā)表于 12-27 10:36

    蔚來與萬達(dá)卡簽署戰(zhàn)略合作協(xié)議

    近日,蔚來與萬達(dá)卡在上海簽署戰(zhàn)略合作協(xié)議。蔚來聯(lián)合創(chuàng)始人、總裁秦力洪,萬達(dá)卡全球執(zhí)行副總裁兼大中華區(qū)總裁常青出席簽約儀式。蔚來商業(yè)資源管理副總裁胡崖音與萬達(dá)卡中國(guó)區(qū)零售和商業(yè)總經(jīng)理張昊代表雙方簽約。
    的頭像 發(fā)表于 12-06 17:18 ?1419次閱讀