Ⅰ 跪求編程大神用C++實現語法分析樹
故障只要不是再PS/2接頭處,一般維修起來不難。通常是由於線路比較短,或比較雜亂而導致滑鼠線被用力拉扯的原因
Ⅱ 每一個編程語言都有自已的語法嗎
當然有自己的語法,要不怎麼能叫一種語言而不同於其它的編程語言?一般你要只是學語法的話,可以看語法圖,一般程序設計語言的語法圖可以用BNF(Backus Naur範式)來描述。
常用的符號有:
::=定義為
|或者
[]0次或1次出現
()0次或多次出現
<>一個非終結符
如:標識符(就是做變數名,程序名等名字的程序文本)一般是由字母開始的,以字母,數字後繼的,那麼標識符就可以這么寫:
<數字>::=0|1|2|3|4|5|6|7|8|9
<字母>::=<大寫字母>|<小寫字母>
<大寫字母>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
<小寫字母>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
<字母或數字>::=<字母>|<數字>
<標識符>::=<字母>(<字母或數字>)
根據以上幾條BNF語言,你就能寫出正確的程序。
Ⅲ 請問BNF範式中中括弧和大括弧可以匹配0次嗎
請問BNF範式中中括弧和大括弧可以匹配0次,這就是不匹配了。
Ⅳ 編程的語言沿革
1946
Konrad Zuse,一位德國工程師,他躲藏在巴伐利亞附近的阿爾卑斯山上時,獨立開發了Plankalkul。他把該項成果應用在其它的事物中,比如國際象棋。
1949
Short Code ,第一種真正在電子計算設備上使用的計算機語言,盡管他是一個純手工編譯的的語言。
1951
Grace Hopper,為Remington Rand工作,是在第一個著名的編譯器——A-o上開始設計工作。當Rand在1957年發布這個語言時,它被稱為MATH-MATIC。
1952
Alick E. Glennie ,他利用自己在曼徹斯特大學的課余時間,發明了一個名為AUTOCODE的編程系統,一個未能成型的編譯器。
1957
FORTRAN——數學公式轉換系統(FORmula TRANslating,FORTRAN名字的由來)——出現。開發隊伍的領導者是John Backus,並且他還為ALGOL的開發和巴柯斯範式(BNF)做出了貢獻。
1958
FORTRAN II出現,它能夠處理子程序和連接匯編語言。由M.I.T的John McCarthy在LISP-LISt Processing上開始設計工作。原始ALGOL規范出現。該規范並未描述數據的輸入輸出方式;這些問題都留給獨立的實現者。
20世紀六十年代末
Pascal 由瑞士Niklaus Wirth教授於設計並創立,具有簡潔的語法,結構化的程序結構,是結構化編程語言,在許多學校的計算機語言課上教授的都是Pascal語言。
創建COBOL
1959
LISP1.5出現。COBOL在數據系統和語言大會(Conference on Data System and Languages)上被創建了。
編譯器出現
1960
ALGOL 60 ,第一種結構化語言出現。它是結構化語言家族樹中的根節點,並最終產生Pascal這樣的語言。ALGOL成為六十年代中期至末期歐洲最為流行的語言。
六十年代早期,Kenneth Iverson開始語言方面的工作,最終產生了APL-A編程語言。它使用專門的字元集,為了正確地使用,你還需要兼容APL的I/O設備。
1962
APL被寫入Iverson的《A Programming Language》一書中。
FORTRAN IV出現。
SNOBOL這個以「首字母拼詞命名」的產品,在工作的初期就取得了絕對的成功,SNOBOL——面向字元串符號(StriNg Oriented symBOlic Language)語言。它衍生了其他一些以首字母拼詞命名的產品:FASBOL,一個SNOBOL編譯器(1971年),還有SPITBOL——Speedy ImplemenTation of snoBOL——同樣在1971年。
1963
ALGOL 60進行修正。
PL/1的工作開始。
1964
APL360被實現。
在達特茅斯大學,John G.Kemeny和Thomas E.Kurtz教授發明了BASIC。最初的實現是一個編譯器。第一個BASIC程序在1964年五月一日下午四點運行。PL/1發布。
1965
SNOBOL3出現。
1966
FORTRAN 66出現。
LISP 2出現。
在Bolt,Beranek和Newman開始了LOGO的工作。小組的頭是Wally Fuerzeig,而且還包括Seymour Papert。LOGO中最著名的便是「龜作圖」。
1967
SNOBOL4,功能獲得極大加強的SNOBOL,出現了。
1968
ALGOL 68,相對於ALGOL 60它是個怪物。一些規范委員會的成員——包括C.A.R.Hoare和Niklaus Wirth——卻贊同該計劃。事實證明ALGOL 68是難以實現的。
ALTRAN,一個FORTRAN的變種出現。
COBOL被ANSI正式定義規范。
Niklaus Wirth開始Pascal方面的工作。
1969
500人參加在紐約Armonk的IBM總部召開的APL會議。APL的分發需求如此之大,該活動此後被人們稱為「The March on Armonk」。
程序編寫
1970
70年代早期,Charles Moore在他的語言Forth中寫下了第一個有意義的程序。
Prolog方面的工作大約在此時開始了。
同樣是在70年代早期的某一天,Xerox PARC由Alan Kay領導,開始了Smalltalk的設計工作。早期版本包括Smalltalk-72,Smalltalk-74和Smalltalk-76。
Pascal在CDC 6000-series電腦上的一個實現出現了。
Icon,SNOBOL4的一個後代產品問世。
1972
Konrad Zuse寫的關於Plankalkul(見1946年)手稿終於出版了。
Dennis Ritchie設計了C。但是最終的參考手冊卻是在1974年發布的。
Prolog的第一個實現——Alain Colmerauer和Phillip Roussel的功勞。
1974
另一個COBOL的ANSI規范出現。
1975
Tiny BASIC,由Bob Albrecht和Dennis Allison設計(由Dick Whipple和John Arnold實現),運行在2KB內存的微型計算機上。一台4KB的機器是較為合適的,它將有2KB的內存應用於這個程序上。
Bill Gates和Paul Allen編寫的一個BASIC版本以抽取每份拷貝版稅的形式銷售給MITS(Micro Instrumentation and Telemetry Systems)。MITS生產Altair,這是一種8080結構的微型計算機。
Scheme,一個LISP的「方言」,由G.L. Steele和G.J. Sussman設計。
Pascal用戶手冊和報告出版,Jensen和Wirth編寫。許多人至今都認為它是Pascal方面權威的參考書籍。
B.W. Kerninghan描述了RATFOR——RATional FORTRAN。它是預處理程序,並且允許在FORTRAN中使用類C的控制結構。RATFOR被應用到了Kernighan和Plauger的「Software Tools」中,它出現在1976年。
PostScript
1976
Design System Language出現,它被認為是PostScript的先驅。
1977
MUMPS的ANSI標准出現——麻省總醫院多用途程序設計系統(Massachusetts General Hospital Utility Multi-Programming System)。MUMPS最初被用來處理醫療記錄,它只能識別字元串類型。隨後被重新命名為M。
設計競賽將導致Ada的產生。由Jean Ichbiah帶領的Honeywell Bull隊伍,即將贏得比賽。
Kim Harris和其他人建立了FIG,一個FORTH興趣小組。他們開發了FIG-FORTH,售價大約為20美元。
70年代晚期的某天,Kenneth Bowles設計出了UCSD Pascal,它使得Pascal可以用在PDP-11和基於Z80 的電腦上。
Niklaus Wirth開始設計Mola,它Mola-2的先行者,Pascal的繼承者。
語言程序
1978
AWK——一個文本處理語言,以它設計者Aho、Weinberger和Kernighan的名字命名。
FORTRAN 77的ANSI標准出現。
1980
Smalltalk-80出現。
Mola-2出現。
Franz LISP出現。
Bjarne Stroustrup開發了一個語言集——被總稱為「C With Classes」——它成為C++的滋生土壤。
1981
Effort開始成為一個LISP的「公共方言」,常被人稱作Common LISP。
日本開始第五代電腦系統工程。主要語言是Prolog。
1982
ISO Pascal出現。
PostScript出現。
1983
Smalltalk-80公布:它由Goldberg等人完成。
Ada出現。他的名字來自Lovelace女伯爵Augusta Ada Byron,她是英國詩人拜倫的女兒。因其在巴貝奇分析機上設計了解伯努利方程的一個程序,而被譽為第一位女程序員。在1983年,國防部指導的全新「任務評定」應用程序是使用該語言編寫的。
1983年的後期和1984年早期,微軟和Digital Research共同發布第一個微型計算機的C編譯器。
七月,第一個C++實現露面。該名稱是由Rick Mascitti取的。
11月,Borland的Turbo Pascal的「沖擊」猶如一場核風暴,這得益於《BYTE》雜志的廣告。
1984
APL2的參考手冊面世。APL2是APL的擴展,它允許嵌套數組。
1985
Forth控制著潛水器定位泰坦尼克號的殘骸。
Vanilla SNOBOL4之微機版發布。
Methods,PC上的面向行(line-oriented)的Smalltalk出現。
微機版本
1986
Smalltalk/V露面——第一個廣泛應用於微機的Smalltalk版本。
Apple公司為Mac機器發布Object Pascal。
Borland發布Turbo Prolog。
Charles Duff發布Actor,一個開發微軟Windows應用程序的面向對象語言。
Eiffel,另外一個面向對象語言出現。
C++露面。
1987
Turbo Pascal 4.0發布。
1988
CLOS規范——公共LISP對象系統(Common LISP Object System)——發表。
Niklaus Wirth完成Oberon,這是他繼Mola-2的後續行動。
1989
ANSI C規范公布。
C++2.0形成了一個參考手冊的初稿。2.0版本增加了諸如多繼承和成員指針等特性。
1990
C++2.1,B.Stroustrup等作者的《Annotated C++ Reference Manual》一書出版。這個版本增加了模板和異常處理特性。
FORTRAN 90包含了眾多新元素比如case語句和派生類型。
Kenneth Iverson和Roger Hui在APL 90會議上提出了J語言。
1991
Visual Basic在COMDEX春展會上獲得《BYTE》雜志頒發的最佳表現獎。
1992
Dylan——以Dylan Thomas命名——由Apple公司發布的一個類似Scheme的面向對象語言。
1993
ANSI發布X3J4.1技術報告——面向對象的COBOL提議初稿。真正的標准預計在1997年完成。
1994
微軟將Visual Basic for Application整合到Excel中。
1995
二月,ISO接受Ada語言1995修訂版。它被稱為Ada95,其中包括OOP特性和支持實時系統。
1996
第一個ANSI C++標准預發布。
Ⅳ 什麼又是EBNF範式
巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首先引入的用來描述計算機語言語法的符號集。
現在,幾乎每一位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。
Ⅵ 編程語言的bnf該如何編寫
以delphi為例。
1。打開delphi
2。拖一個button控制項到窗體上
3。雙擊此button控制項
4。寫一句:showmessage("大家好");
5。按F9鍵
6。看看一個能運行的軟體已經出現在你
Ⅶ 什麼是編程
編程就是讓計算機為解決某個問題而使用某種程序設計語言編寫程序代碼,並最終得到結果的過程。為了使計算機能夠理解人的意圖,人類就必須要將需解決的問題的思路、方法、和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算機之間交流的過程就是編程。
概述
從計算機發明至今,隨著計算機硬體和軟體技術的發展,計算機的編程語言經歷了機器語言、匯編語言、面向過程的程序設計語言以及面
文件系統驅動編程
向對象的程序設計語言階段。[1]編輯本段機器語言
在計算機系統中,一條機器指令規定了計算機系統的一個特定動作。一個系列的計算機在硬體設計製造時就用了若干指令規定了該系列計算機能夠進行的基本操作,這些指令一起構成了該系列計算機的指令系統。在計算機應用的初期,程序員使用機器的指令系統來編寫計算機應用程序,這種程序稱為機器語言程序。使用機器語言編寫的程序,由於每條指令都對應計算機一個特定的基本動作,所以程序佔用內存少、執行效率高。缺點也很明顯,如:編程工作量大,容易出錯;依賴具體的計算機體系,因而程序的通用性、移植性都很差。[2]編輯本段匯編語言
為了解決使用機器語言編寫應用程序所帶來的一系列問題,人們首先想到了使用助記符號來代替不容易記憶的機器指令。這種助記符號來表示計算機指令的語言稱為符號語言,也稱匯編語言。在匯編語言中,每一條用符號來表示的匯編指令與計算機機器指令一一對應;記憶難度大大減少了,不僅易於檢查和修改程序錯誤,而且指令、數據的存放位置可以有計算機自動分配。用匯編語言編寫的程序稱為源程序,計算機不能直接識別和處理源程序,必須通過某種方法將它翻譯成為計算機能夠理解並執行的機器語言,執行這個翻譯工作的程序稱為匯編程序。 使用匯編語言編寫計算機程序,程序員仍然需要十分熟悉計算機系統的硬體結構,所以從程序設計本身上來看仍然是低效率的、煩瑣的。但正是由於匯編語言與計算機硬體系統關系密切,在某些特定的場合,如對時空效率要求很高的系統核心程序以及實時控製程序等,迄今為止匯編語言仍然是十分有效的程序設計工具。編輯本段高級語言
高級語言是一類接近於人類自然語言和數學語言的程序設計語言的統稱。按照其程序設計的出發點和方式不同,高級語言分為了面向過程的語言和面向對象的語言,如Fortran語言、C語言等都是面向過程的語言;而以C++、Smalltalk等為代表的面向對象的語言與面向過程語言有著許多不同,這些語言支持「程序是相互聯系的離散對象集合」,這樣一種新的程序設計思維方式,具有封裝性、繼承性和多態性等特徵。[3] 高級語言按照一定的語法規則,由表達各種意義的運算對象和運算方法構成。使用高級語言編寫程序的優點是:編程相對簡單、直觀、易理解、不容易出錯;高級語言是獨立於計算機的,因而用高級語言編寫的計算機程序通用性好,具有較好的移植性。 用高級語言編寫的程序稱為源程序,計算機系統不能直接理解和執行,必須通過一個語言處理系統將其轉換為計算機系統能夠認識、理解的目標程序才能成為計算機系統執行。[4]編輯本段執行原理
計算機對除機器語言以外的源程序不能直接識別、理解和執行,都必須通過某種方式轉換為計算機能夠直接執行的機器語言。這種將高級
MINIPRO編程硬體
程序設計語言編寫的源程序轉換到機器目標程序的方式有兩種:解釋方式和編譯方式。 解釋方式下,計算機對高級語言書寫的源程序一邊解釋一邊執行,不能形成目標文件和執行文件。 編譯方式下,首先通過一個對應於所用程序設計語言的編譯程序對源程序進行處理,經過對源程序的詞法分析、語法分析、語意分析、代碼生成和代碼優化等階段將所處理的源程序轉換為用二進制代碼表示的目標程序,然後通過連接程序處理將程序中所用的函數調用、系統功能調用等嵌入到目標程序中,構成一個可以連續執行的二進制執行文件。調用這個執行文件就可以實現程序員在對應源程序文件中所指定的相應功能。編輯本段語言的發明
1946 Konrad Zuse,一位德國工程師,他躲藏在巴伐利亞附近的阿爾卑斯山上時,獨立開發了Plankalkul。他把該項成果應用在其它的事物中,比如國際象棋。 1949 Short Code ,第一種真正在電子計算設備上使用的計算機語言,盡管他是一個純手工編譯的的語言。 1951 Grace Hopper,為Remington Rand工作,是在第一個著名的編譯器——A-o上開始設計工作。當Rand在1957年發布這個語言時,它被稱為MATH-MATIC。 1952 Alick E. Glennie ,他利用自己在曼徹斯特大學的課余時間,發明了一個名為AUTOCODE的編程系統,一個未能成型的編譯器。 1957 FORTRAN——數學公式轉換系統(FORmula TRANslating,FORTRAN名字的由來)——出現。開發隊伍的領導者是John Backus,並且他還為ALGOL的開發和巴柯斯範式(BNF)做出了貢獻。 1958 FORTRAN II出現,它能夠處理子程序和連接匯編語言。由M.I.T的John McCarthy在LISP-LISt Processing上開始設計工作。原始ALGOL規范出現。該規范並未描述數據的輸入輸出方式;這些問題都留給獨立的實現者。 20世紀六十年代末 Pascal 由瑞士Niklaus Wirth教授於設計並創立, 具有簡潔的語法,結構化的程序結構,是結構化編程語言,在許多學校的計算機語言課上教授的都是Pascal語言。
Ⅷ BNF是什麼
巴科斯範式及其擴展
BNF & Augmented BNF
什麼是巴科斯範式?
巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首次引入一種形式化符號來描述給定語言的語法(最早用於描述ALGOL 60 編程語言)。確切地說,早在UNESCO(聯合國教科文組織)關於ALGOL 58的會議上提出的一篇報告中,Backus就引入了大部分BNF符號。雖然沒有什麼人讀過這篇報告,但是在Peter Naur讀這篇報告時,他發現Backus對ALGOL 58的解釋方式和他的解釋方式有一些不同之處,這使他感到很驚奇。首次設計ALGOL的所有參與者都開始發現了他的解釋方式的一些弱點,所以他決定對於以後版本的ALGOL應該以一種類似的形式進行描述,以讓所有參與者明白他們在對什麼達成一致意見。他做了少量修改,使其幾乎可以通用,在設計ALGOL 60的會議上他為ALGOL 60草擬了自己的BNF。看你如何看待是誰發明了BNF了,或者認為是Backus在1959年發明的,或者認為是Naur在1960年中發明。(關於那個時期編程語言歷史的更多細節,參見1978年8月,《Communications of the ACM(美國計算機學會通訊)》,第21卷,第8期中介紹Backus獲圖靈獎的文章。這個注釋是由來自Los Alamos Natl.實驗室的William B. Clodius建議的)。
現在,幾乎每一位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。
Ⅸ 基礎正則表達式的BNF是怎樣的
括弧的意思:將(和)之間的表達式定義為「組」(group),並且將匹配這個表達式的字元保存到一個臨時區域(一個正則表達式中最多可以保存9個),它們可以用\1到\9的符號來引用。|的意思:將兩個匹配條件進行邏輯「或」(Or)運算。例如正則表達式(him|her)匹配"itbelongstohim"和"itbelongstoher",但是不能匹配"itbelongstothem."。*的意思:匹配0或多個正好在它之前的那個字元。例如正則表達式.*意味著能夠匹配任意數量的任何字元。所以你給的那個例子00(0|1)*可以用來匹配00或者001或者000或者0000或者0011,但是不能匹配011等等。具體定義還是要多參考一下下面的文章:正則表達式,RegularExpression(也稱為「regex」或「regexp」),是一種用來描述文本模式的特殊語法。一個正則表達式由普通字元(例如字元a到z)以及特殊字元(稱為元字元,如/、*、?等)組成。簡單地說,一個正則表達式就是你需要匹配的字元串。例如,正則表達式「A*B」匹配字元串「ACCCB」但是不匹配「ACCCC」。什麼是巴科斯範式?巴科斯範式(BNF:Backus-NaurForm的縮寫)是由JohnBackus和PeterNaur首先引入的用來描述計算機語言語法的符號集。現在,幾乎每一位新編程語言書籍的作者都使用巴科斯範式來定義編程語言的語法規則。巴科斯範式的內容在雙引號中的字("word")代表著這些字元本身。而double_quote用來代表雙引號。在雙引號外的字(有可能有下劃線)代表著語法部分。尖括弧()內包含的為必選項。方括弧([])內包含的為可選項。大括弧({})內包含的為可重復0至無數次的項。豎線(|)表示在其左右兩邊任選一項,相當於"OR"的意思。::=是「被定義為」的意思。巴科斯範式示例這是用BNF來定義的Java語言中的For語句的實例:FOR_STATEMENT::="for""("(variable_declaration|(expression";")|";")[expression]";"[expression]";"")"statement這是Oraclepackages的BNF定義:package_body::="package"package_name"is"package_obj_body{package_obj_body}["begin"seq_of_statements]"end"[package_name]";"package_obj_body::=variable_declaration|subtype_declaration|cursor_declaration|cursor_body|exception_declaration|record_declaration|plsql_table_declaration|procere_body|function_bodyprocere_body::="procere"procere_name["("argument{","argument}")"]"return"return_type"is"["declare"declare_spec";"{declare_spec";"}]"begin"seq_of_statements["exception"exception_handler{exception_handler}]"end"[procere_name]";"statement::=comment|assignment_statement|exit_statement|goto_statement|if_statement|loop_statement|null_statement|raise_statement|return_statement|sql_statement|plsql_block這是用BNF來定義的BNF本身的例子:syntax::={rule}rule::=identifier"::="expressionexpression::=term{"|"term}term::=factor{factor}factor::=identifier|quoted_symbol|"("expression")"|"["expression"]"|"{"expression"}"identifier::=letter{letter|digit}quoted_symbol::="""{any_character}"""擴展的巴科斯範式AugmentedBNFRFC2234定義了擴展的巴科斯範式(ABNF)。近年來在Internet的定義中ABNF被廣泛使用。ABNF做了的改進,比如說,在ABNF中,尖括弧不再需要。
Ⅹ 簡述你知道的5種程序設計語言的特點
Fortran:由一個主程序或一個主程序與若干個子程序組成。
ALGOL:巴乎斯範式BNF來描述言的語法。還提供動態數組和過程的遞歸調用。
COBOL(COmmon Business-Oriented Language)是一種面向事務處理的高級語言。目前COBOL語言主要應用於情報檢索,商業數據處理等管理領域。
Pascal語言是一種結構化程序設計語言,過程可以是嵌套和遞歸的。
C語言:兼顧了高級語言和匯編語言的特點,簡潔,豐富,可移植。直接訪問操作系統和底層硬體,C在系統應用和實時處理應用的開發中成為主要語言。
C++:是在C的基礎上增加了類機制,使其成為一種面向對象的程序設計語言。
Java,目的是用於開發網路瀏覽器的小應用程序.
分類:
1.命令式程序設計語言是基於動作的語言,Fortran,Pascal,C
2.面向對象的程序設計語言,模擬領域發展起來的Simula,C++,Java,smaltalk,
對象,類,繼承,是面向對象的三大特點。
3.函數式程序設計語言是一類似λ-演算為基礎的語言,基本要領來自於LISP(1958年為了人工智慧應用而設計的語言).函數是一種對應規則(映射),它使定義域中每個元素和值域中唯一的元素相對應。 LISP程序和數據等價.數據結構可以作為程序執行,程序可以作為數據修改.
4.邏輯型程序設計語言,以形式邏輯為基礎的語言,其代表是建立在關系理論和一階謂詞理論基礎上的PROLOG(Programming in Logic).關鍵操作是模式匹配。有很強的推理功能,適用於書寫自動定理證明,專家系統,自然語言理解等問題的程序。
http://blog.csdn.net/mShopping/archive/2008/10/14/3073176.aspx