日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

使用JavaCC生成解析器(前言)

發(fā)布時間:2023/12/15 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用JavaCC生成解析器(前言) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

JavaCC是Java編程語言中最古老、使用最廣泛的解析器生成器之一,但它往往被認(rèn)為難以使用。有些程序員還沒有遇到過解析器生成器范式,因此不熟悉編寫規(guī)范然后據(jù)此生成解析器的過程。其他程序員對使用另一個解析器生成器(譬如古老的lex/yacc的組合)記憶久遠(yuǎn),現(xiàn)在需要進(jìn)一步了解JavaCC的語法和指定文法的能力。即使是用過JavaCC的程序員也可能不確定某些高級功能如何工作或如何有效地調(diào)試特定的JavaCC問題。

當(dāng)我第一次使用JavaCC時,一位同事為我設(shè)置了JavaCC文法并編寫了一些Ant目標(biāo)來開始工作。在接下來一年左右的時間里,我偶爾會對文法做一些修改,閉上眼睛,運(yùn)行Ant和單元測試,并希望一切仍然正常。終于我有一些頓悟(首先是符號化!節(jié)點描述符可以使樹變得更簡單!)并開始真正理解那些迄今為止我盡可能避免使用的大型.jjt文件。在那之后我撰寫了更多的文法掛在JavaCC郵件列表上,為JavaCC的源代碼庫提供了一些修復(fù),并且慢慢地越來越熟悉JavaCC和JJTree。

JavaCC有一定數(shù)量的在線文檔;在您最喜歡的搜索引擎中輸入“JavaCC”將會出現(xiàn)一大堆的結(jié)果:文章、博客條目、JavaCC郵件列表的歸檔、JavaCC站點的文檔等等。這些結(jié)果中比較有用的一個是“JavaCC FAQ”,它由Theodore Norvell博士維護(hù),包含許多有用的信息。我多次反復(fù)閱讀此FAQ(常見問題解答),并且總是能從中學(xué)到一些新的東西。

盡管有了這些在線文檔,但JavaCC看起來仍然無法接近,而且對于更高級的問題的回答可能難以捉摸。這是一個遺憾,因為JavaCC是一個多用途且功能強(qiáng)大的實用程序,可以輕松處理大多數(shù)解析作業(yè)。更妙的是,有許多現(xiàn)有的JavaCC文法,因此如果你需要處理特定的語言,那么很可能已經(jīng)存在針對它的JavaCC文法。了解JavaCC如何工作以及如何有效地使用它可以將一個月的項目變成一個可以在一天內(nèi)解決的問題。

考慮到這一點,讓JavaCC更易于訪問是我撰寫本書的主要動力之一。我的意圖是,正在從事解析工作的程序員可以拿起這本書,轉(zhuǎn)到目錄或索引,并快速找到幾乎任何JavaCC問題的解決方案。無論您是從頭開始編寫文法還是修改現(xiàn)有文法,我希望您能在這里找到問題的答案。

本書是如何組織的

本書分為十一章和兩個附錄。

  • 第1章介紹了JavaCC和JJTree的概述。它還向您展示了如何使用Ant構(gòu)建工具和Maven構(gòu)建工具從命令行運(yùn)行JavaCC。
  • 第2章討論使用JavaCC編寫記號賦予器(Tokenizer)。它包括正則表達(dá)式生成、詞法操作、詞法狀態(tài)以及用于創(chuàng)建和修改記號的各種技術(shù)。
  • 第3章介紹JavaCC的核心:編寫解析器的語法規(guī)范。我們將討論基本的文法元素、語法操作、各種類型的前瞻性以及避免常見解析陷阱的方法。
  • 第4章描述了JavaCC的內(nèi)置樹構(gòu)建器JJTree。本章著眼于將文法從JavaCC移動到JJTree、節(jié)點創(chuàng)建和節(jié)點描述符,以及編寫遍歷抽象語法樹的程序。
  • 第5章是一個簡短的章節(jié),涵蓋了JavaCC的文檔實用工具JJDoc。我們將討論JJDoc功能,并回顧一些最近添加的功能。
  • 第6章介紹如何使用JavaCC處理Unicode數(shù)據(jù)。我們將介紹JavaCC為處理Unicode轉(zhuǎn)義序列提供的工具、一些常見的字符編碼問題和解決方案,以及使用JavaCC的Unicode相關(guān)選項。
  • 第7章討論錯誤處理策略。本章將介紹符號化(Tokenizing)、解析和樹構(gòu)建階段中的錯誤檢測、報告和恢復(fù)。
  • 第8章是一個案例研究。在本章中,我們將討論您將看到的更復(fù)雜的文法之一——JavaCC文法本身。我們研究該文法解決各種解析問題的方式,同時花時間討論JavaCC文法結(jié)構(gòu)。
  • 第9章討論測試JavaCC的策略。我們將介紹如何使用流行的單元測試工具JUnit為記號設(shè)定器和解析器的編寫測試。我們還探索了一種使用XPath表達(dá)式來測試JJTree生成的抽象語法樹的技術(shù)。
  • 第10章演示了Eclipse JavaCC插件的操作。我們將討論插件的安裝和配置,以及它的許多特性的概述,以及它如何在JavaCC編程任務(wù)中節(jié)省您的時間和精力。
  • 第11章用幾個小示例文法進(jìn)行了總結(jié),以說明各種技術(shù)并將它們結(jié)合在一起。本章說明,即使您沒有編寫過大而復(fù)雜的語言文法,JavaCC也是有用的。JavaCC也適用于小型作業(yè)!
  • 附錄A介紹了JavaCC目錄布局。我們還討論了如何從源代碼構(gòu)建JavaCC。
  • 附錄B顯示了JavaCC、JJTree、JJDoc和JTB選項的列表。這些選項在相應(yīng)的章節(jié)中有詳細(xì)介紹,但在此處提供這些選項以供快速參考。

本書的目標(biāo)讀者

我將本書的目標(biāo)讀者定位于使用JavaCC和JJTree來解決解析問題的程序員。但是,如果幸運(yùn)的話,本書將對很多人有所幫助。從以下幾個角度思考您將從本書中得到什么:

  • 項目經(jīng)理 如果您是一個使用JavaCC的項目的經(jīng)理,那么這本書可以作為參考。它涵蓋了JavaCC的記號賦予器(Tokenizer)、解析器和樹構(gòu)建器的大部分(如果不是全部的話)重要特性,它還包括棘手但重要的主題,比如處理國際字符集。如果JavaCC已經(jīng)成為一個不為人知的項目,那么它就不需要再存在了。
  • 學(xué)生 如果您是一名學(xué)生,本書將幫助你把編譯器理論課程教材和講義中的例子翻譯成可運(yùn)行的Java代碼。JavaCC包含您將看到在課程中提及的所有技術(shù)能力,例如EBNF支持和LL(k)解析。它還包含了一些額外的特性,比如詞法操作和狀態(tài)、大量定制解析樹的功能,以及可以使解析問題的更容易解決的擴(kuò)展調(diào)試功能。最后,JavaCC在企業(yè)和開源世界中都得到了廣泛的應(yīng)用,現(xiàn)在熟悉它可以在您參與課堂外的編程時獲得回報。
  • 教師 教師不會在本書中發(fā)現(xiàn)大量的新理論材料,但它應(yīng)該有助于學(xué)生弄清楚復(fù)雜的左遞歸與算子關(guān)聯(lián)。您可能會發(fā)現(xiàn),關(guān)于測試JavaCC解析器的部分有助于讓學(xué)生保持在正確的軌道上,而且Eclipse插件可以消除一些命令行繁重的工作。書中涉及的許多話題都是由老師們提出的,額外的反饋當(dāng)然是非常受歡迎的。
  • 程序員 最后,本書的主要讀者是從頭開始創(chuàng)建JavaCC文法或致力于改進(jìn)、增強(qiáng)或調(diào)試現(xiàn)有文法的程序員。當(dāng)前的JavaCC文檔包含一些很好的信息,但是閱讀它就像跳入池的最深處。希望本書中的許多示例將提供一個審慎的介紹,并可能填補(bǔ)一些空白。快速的谷歌搜索可以找到許多JavaCC教程,但是一篇5頁的在線文章不能如此深入。本書旨在提供關(guān)于JavaCC和JJTree更多不為人知的細(xì)節(jié)。

概括地說,我認(rèn)為您會發(fā)現(xiàn)學(xué)習(xí)和使用JavaCC將使您成為更好的程序員。計算機(jī)程序是用人類可讀的文本編寫的,必須有人編寫程序?qū)⒃创a翻譯成機(jī)器碼。JavaCC涵蓋了該過程的前端:讀取代碼、驗證和解析,以及生成可用的語法樹。這是一個完整的編譯器的一半,剩下的就是編寫代碼生成后端。一旦您對這個過程的機(jī)制有了很好的了解,您就會注意到編譯器技術(shù)被用在各種各樣的地方,并且您將能夠更有效地為這些工作做出貢獻(xiàn)。

未包含內(nèi)容

本書限于特定的解析器生成器:JavaCC。它旨在為該工具提供一個很好的參考和大量示例。但意味著這不是一本關(guān)于編譯器構(gòu)造的書,也不是一本關(guān)于解析理論的書。所以您不會看到在那些類型的書中才會出現(xiàn)的討論;比如,不存在任何從NFA到DFA轉(zhuǎn)換。也沒有對諸如喬姆斯基譜系(Chomsky?hierarchy)等形式文法的深入討論。我在參考書目中列入了幾本涉及這些領(lǐng)域的參考資料書籍。

當(dāng)然,如果我認(rèn)為它能幫助您更多地理解特定的JavaCC特性,那么我將偶爾會深入探討一些理論。但在大多數(shù)情況下,本書仍然堅持實用。

慣例(約定)

代碼示例、程序輸出以及腳本和程序名稱都使用monospace字體編寫。各種JavaCC類的名稱通常也用monospace表示,例如,“這將生成一個TokenManager接口”。有時,如果一個類在一般意義上被引用,它將使用常規(guī)字體,例如,“如果您想要完全控制,您可能需要編寫自己的TokenManager。”

第一次使用技術(shù)術(shù)語時,它是用斜體寫的。偶爾我會重復(fù)斜體字,如一個術(shù)語在書中早期的高層意義上首次使用。

代碼示例

有關(guān)更新,勘誤表和示例代碼,請參閱本書的網(wǎng)站:

http://generatingparserswithjavacc.com/

再版說明

這是第二版,因此它與第一版有許多相似之處;書的整體結(jié)構(gòu)和內(nèi)容大致相同。但是JavaCC?4.1于2008年夏末發(fā)布,自那時起已經(jīng)發(fā)布了幾個bugfix版本。因此,此版本涵蓋了這些新版本中提供的新特性和Bug修復(fù)。我試圖通過在索引中使用“JavaCC 4.0新增”標(biāo)記它們來輕松定位這些與JavaCC版本相關(guān)的更新,因此您可以翻到后面并查找所有已更改的內(nèi)容。我還將本書中提到的基礎(chǔ)結(jié)構(gòu)和實用程序(Java、Ant、Maven、Eclipse)的更新,以便它們與您在項目中使用JavaCC時可能找到的內(nèi)容更加匹配。最后,在最近的版本中發(fā)現(xiàn)并修復(fù)的一些小Bug,我也在這里提到了。

聯(lián)系我們

我們已經(jīng)做了很大的努力來確保書中的材料是準(zhǔn)確的,但是一些錯誤可能會在過程中出現(xiàn)。請告訴我們有關(guān)錯誤、令人困惑的內(nèi)容,或您認(rèn)為我們可能有興趣在未來的版本修復(fù)的任何其他內(nèi)容。你可以通過以下方式聯(lián)系Centennial Books:

?

Centennial Books

1591 Chapel Hill Drive Alexandria, VA 22304

USA Phone: 703-751-6162

Fax: 703-751-2045

Email: <centennialbooks@comcast.net>

如有技術(shù)問題,請隨時直接與作者聯(lián)系:<tom@infoether.com>。

致謝

首先,也是最重要的,要感謝我的妻子Alina,感謝她在我日復(fù)一日地埋頭寫這本書的時候所表現(xiàn)出的耐心。感謝我們的孩子(Maria、Tommy、Anna、Sarah、Steven和James)在這段時間里給我們的擁抱。

感謝我的第一版技術(shù)評審員:Kenneth Beesley博士、Sophie Quigley和Rémi?Koutchérawy。他們填補(bǔ)了許多空白,如果沒有他們出色的反饋,這本書的可讀性會低得多。剩下的任何錯誤或遺漏都是我的。

非常感謝Sriram Sankar博士和Sreenivasa Viswanadha撰寫和維護(hù)JavaCC。他們做了大量的工作來實現(xiàn)JavaCC,消除所有的初始Bug,并優(yōu)化JavaCC本身和JavaCC生成的代碼。他們應(yīng)該為這個對很多人都非常有用的超級實用工具得到所有的贊譽(yù)。還要感謝Paul Cager為發(fā)布JavaCC 4.1(及其后續(xù)版本)所做的努力;他在實現(xiàn)特性、修復(fù)Bug和保持整體運(yùn)轉(zhuǎn)方面做了大量工作。

感謝Sun Microsystem的Michael Van De Vanter博士在協(xié)調(diào)JavaCC開源工作方面所做的工作。同樣,還要感謝Paul Cager幾年前在清理JavaCC許可條款方面所做的工作。

我從JavaCC的用戶郵件列表的討論中獲益匪淺。Sankar博士和Sreenivasa Viswanadha博士在那里發(fā)布了大量有用的材料。Nathan Ryan博士的帖子非常有用;有一段時間,我瀏覽了這份清單的檔案,并把每一份都重新讀了一遍。

其次,要感謝Kenneth Beesley博士撰寫的關(guān)于JavaCC主題的優(yōu)秀白皮書;它們對于幫助我理解各種棘手的問題非常有幫助。感謝Theodore Norvell博士撰寫和維護(hù)JavaCC FAQ,這是我最初學(xué)習(xí)資料的來源之一。感謝Curtis?Dyreson博士建議包含語法測試的章節(jié)。感謝Matt Kirkey對本書進(jìn)行了早期評論和提供的一些有用的反饋。

感謝Nathan Ryan博士對第一版的廣泛反饋。還要感謝Nathan Ward和John Wilson在第一版中查找并報告了幾個拼寫錯誤。

總結(jié)

以上是生活随笔為你收集整理的使用JavaCC生成解析器(前言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。