ANTLR:入門

這篇文章使您了解ANTLR的基礎知識。 以前,我們已經了解了如何將ANTLR設置為外部工具。 在這里: ANTLR外部工具
:)
所以,我們開始…。

什么是ANTLR?

?另一個語言識別工具,是一種語言工具,它提供了一個框架,用于從包含動作的語法描述中構造識別器,解釋器,編譯器和翻譯器。

目標語言是什么?

?動作腳本,Ada
? C
? C#; C#2 ?C#3 ?D ?Emacs ELisp ?目標C ?Java ?Java腳本 ?Python ?Ruby ?Perl6 ?Perl ?PHP ?奧伯龍 ?斯卡拉 ?ANTLR支持什么?

?樹木建造
?錯誤恢復
?錯誤處理 ?樹木漫步 ?翻譯 ?它支持什么環境?

ANTLRWorks是ANTLR的IDE。 它是圖形語法編輯器和調試器,由Jean Bovet使用Swing編寫。

可以使用ANTLR嗎?

?““ REAL””編程語言
?特定領域的語言[DSL] ?誰在使用ANTLR?

?編程語言:Boo,Groovy,Mantra,Nemerle,XRuby等。
?其他工具:HIbernate,Intellij IDEA,Jazillian,JBoss Rules,Keynote(Apple),WebLogic(Oracle)等。
?您在哪里可以找到ANTLR?

您可以隨時在這里關注http://www.antlr.org
?下載免費和開源的ANTLR和ANTLRWorks
?文檔,文章,Wiki,郵件列表,示例…。 您可以在這里找到所有東西!

劃船…。
?

  • 基本條款

? Lexer :將字符流轉換為令牌流。
? 解析器 :令牌過程,可能會創建AST
? 抽象語法樹(AST) :解析的輸入的中間樹表示,比令牌流更易于處理。 它也可以被多次處理。 ? 樹解析器 :它處理AST ? 字符串模板 :一個庫,支持使用帶有占位符的模板來輸出文本

  • 一般步驟

?在一個或多個文件中編寫語法
?編寫字符串模板[可選]?使用ANTLRWorks調試語法
?從語法生成類 ?編寫使用生成的類的應用程序 ?提交符合語法的應用程序文本
再遠一點...。

讓我們寫一個簡單的語法,其中包括
?Lexer
?解析器 Lexer:將輸入流分成令牌 讓我們以“ int a,b;”形式的C中的簡單聲明類型為例。 或“ int a;” 和浮動。 如我們所見,我們可以編寫lexer如下:

//TestLexer.g
語法TestLexer;
ID:('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..' 9'|'_'|'。'|'a'..'z'|'A'..'Z')*; COMMA:','; 分號:';'; 數據類型:“ int” | '浮動';
如我們所見,這些是要轉換為令牌的字符。 因此,現在讓我們編寫一些規則來處理生成的這些令牌,并可能相應地創建一個解析樹。

//TestParser.g
語法TestParser;
選項{語言:Java;} decl:DATATYPE ID(','ID)*;

在語法上運行ANTLR只會生成詞法分析器和解析器,TestParser和TestLexer。 為了在某??些輸入上實際嘗試語法,我們
需要使用main()方法的測試裝備,如下所示:
// Test.java

import org.antlr.runtime.*;
public class Test {public static void main(String[] args) throws Exception {// Create an input character stream from standard in
ANTLRFileStream input = new ANTLRFileStream("input"); // give path to the file input
// Create an ExprLexer that feeds from that stream
TestLexer lexer = new TestLexer(input);
// Create a stream of tokens fed by the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that feeds off the token stream
TestParser parser = new TestParser(tokens);
// Begin parsing at rule decl
parser.decl();
}}

在下一篇博客文章中,我們將看到如何創建AST并在樹上走來走去……
祝您學習愉快! :)

參考: ANTLR入門: JCG合作伙伴 Swathi V的基礎知識 , 網址為* Techie(S)pArK *博客。


翻譯自: https://www.javacodegeeks.com/2012/06/antlr-getting-started.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安裝JAVA8要登錄_JDK8的安裝及環境配置

原文鏈接:https://www.cnblogs.com/chenxj/p/10137221.html1、下載JDK;b、或百度網盤:鏈接:https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取碼:0cf62、雙擊安裝程序,點擊下一步安裝目錄若不修改,可直…

【學習筆記】JavaScript基礎(一)

【學習過程遇到疑問和延伸閱讀】 1.document.write()的深入理解write()方法可向文檔寫入HTML表達式或JavaScript代碼。可使用document.write()向輸出流寫文本或者HTML 延伸閱讀《js中document.write的那點事》http://www.cnblogs.com/dh616854836/articles/2140349.html 2.編程…

js操縱cookie技術

<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>圖片瀏覽</title> <script typ…

java none怎么用tomcat_使用tomcat做java中間件

tomcat是一個老牌的中間件了&#xff0c;從我從業到現在時不時都會遇到它&#xff0c;方便、靈活、性能一般是我對它的使用經驗總結。配置注意 &#xff1a; tomcat 7 和 6 有很大差別&#xff0c;server.xml catalina.sh 配置文件不能通用設置tomcat7 使用jdk1.7export JAVA_H…

早期訪問中帶有NetBeans的Oracle公共云Java服務

誰期望發生這種情況&#xff1a;Oracle正在開發公共云產品&#xff0c;并且即將開始正式啟動的跡象已經出現。 在正式宣布之后將近一年&#xff0c;我被邀請加入所謂的“搶先體驗”計劃&#xff0c;以試駕新服務并提供反饋。 多虧負責產品的經理Reza Shafii &#xff0c;我才可…

MySQL 分組之后如何統計記錄條數 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 條件 // 這樣查出來的是總記錄條SELECT count(*) FROM 表名 WHERE 條件 GROUP BY id //這樣統計的會是每組的記錄條數.如何獲得 第二個sql語句的總記錄條數? 則是&#xff0c;如下&#xff1a;    select count(*) from(SELECT count(*) F…

python CS游戲1--角色創建,武器購買

#codingutf-8 import random 本文字主要目的是隨機創建一個角色&#xff0c;并且武器是隨機產生的&#xff0c;自帶系統給的費用10000,10000元錢可以購買武器&#xff0c;購買武器以后&#xff0c;錢會減少&#xff0c;直到不足提示無法購買 dir{"AK47":2000,"…

App Engine中的Google Services身份驗證,第2部分

在本教程的第一部分中&#xff0c; 我描述了如何使用OAuth進行Google API服務的訪問/身份驗證。 不幸的是&#xff0c;正如我稍后發現的那樣&#xff0c;我使用的方法是OAuth 1.0&#xff0c;顯然現在Google正式棄用了OAuth 1.0&#xff0c;改用OAuth 2.0版本。 顯然&#xff0…

字符串常用操作

1 常用&#xff1a;分割、長度、索引、切片2 r (1,2,3,4,5)#只讀列表元組3 name "liangml"4 strip5 username input("user:")6 if username.strip() "liangml":#strip可以將輸入前后的空格都換掉7 print("welcome")8 9 split …

java 保存bufferedimage_java - 如何將BufferedImage保存為Fi

答案在于Java Documentation的編寫/保存圖像教程。SaveImage.java類提供以下保存圖像的方法&#xff1a;static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException該教程解釋了這一點BufferedImage類實現RenderedImage接口。所以它…

MarkDownPad2 注冊碼

注冊信息 郵箱地址&#xff1a; Soar360live.com 授權秘鑰&#xff1a;GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f47fzsZo45JE2hfQBFi2O9Jldjp1mW8HUpTtLA2a5/sQytX…

[51nod1297]管理二叉樹

一個初始為空的二叉搜索樹T&#xff0c;以及1到N的一個排列P: {a1, a2, ..., aN}。我們向這個二叉搜索樹T添加這些數&#xff0c;從a1開始, 接下來是 a2, ...&#xff0c; 以aN結束。在每一個添加操作后&#xff0c;輸出T上每對節點之間的距離之和。例如&#xff1a;4 7 3 1 8 …

Java Swing中的聊天氣泡

本文將向您解釋“如何在Java swing應用程序中繪制聊天氣泡&#xff1f;” 聊天氣泡與呼出氣泡或思想氣泡相同。 今天&#xff0c;大多數聊天應用程序都以這種格式顯示轉換&#xff0c;因此本文將幫助您在用Java swing創建的桌面應用程序中進行相同的操作。 以下課程用于繪制第一…

java內存模型按照線程隔離性_深入理解Java多線程與并發框(第③篇)——Java內存模型與原子性、可見性、有序性...

一、Java內存模型Java Memory Modle&#xff0c;簡稱 JMM&#xff0c;中文名稱 Java內存模型&#xff0c;它是一個抽象的概念&#xff0c;用來描述或者規范訪問內存變量的方式。因為各中計算機的操作系統和硬件不同&#xff0c;方式機制也可能不同&#xff0c;Java內存模型用于…

PHP通過PDO連接Microsoft Access數據庫

1連接到access數據庫 $db new PDO("odbc:Driver{Microsoft Access Driver (*.mdb, *.accdb)}; dbq" .realpath("yourfilepath\# ddsbbn3A02.Mdb")) or die("Connect Error"); realpath函數用來規范化絕對路徑 2修改數據庫中BM_sitelink表中字段…

ZK實際應用:樣式和布局

在之前的ZK in Action帖子中&#xff0c;我們使用ZK MVVM實現了CRUD功能 。 我們還快速瀏覽了一些樣式代碼&#xff0c;可能需要更多的解釋。 在本文中&#xff0c;我們將討論如何在ZK小部件上附加新CSS樣式規則&#xff0c;以及如何覆蓋現有樣式。 我們還將介紹ZK中UI布局的一…

java面向對象的三大特征是6_Java面向對象的三大特征

面向對象的本質&#xff1a;以類的方式組織代碼&#xff0c;以對象的方式組織數據。面向對象三大特性&#xff1a;封裝 繼承 多態封裝&#xff1a;概念&#xff1a;隱藏對象內部的復雜性&#xff0c;只對外公開簡單的接口。便于外界調用&#xff0c;從而提高系統的可擴展性&…

Tornado(一)

Tornado 特點 Tornado是一個用Python寫的相對簡單的、不設障礙的Web服務器架構&#xff0c;用以處理上萬的同時的連接口&#xff0c;讓實時的Web服務通暢起來。雖然跟現在的一些用Python寫的Web架構相似&#xff0c;比如Django&#xff0c;但Tornado更注重速度&#xff0c;能夠…

Android下Opengl ES實現單屏幕雙眼顯示

http://blog.csdn.net/u011371324/article/details/68946779 默認情況下&#xff0c;Opengl ES使用系統提供的幀緩沖區作為繪圖表面&#xff0c;一般情況下&#xff0c;如果只在屏幕的表面繪圖的話&#xff0c;系統提供的默認幀緩沖區很高效&#xff0c;但是很多應用程序需要渲…

Oracle Service Bus –線程阻塞案例研究

本案例研究描述了在AIX 6.1和IBM Java VM 1.6上運行的Oracle Service Bus 11g遇到的線程阻塞問題的完整根本原因分析過程。 本文也是您提高線程轉儲分析技能的絕佳機會&#xff0c;我強烈建議您學習并正確理解以下分析方法。 與過早的中間件&#xff08;Weblogic&#xff09;重…