Quitada ブログ RX

Quitada ブログ RX

PR

×

Keyword Search

▼キーワード検索

Profile

quitada 2.0

quitada 2.0

Calendar

Category

雑

(284)

SEO

(144)

金持ち父さん

(640)

生活

(215)

パソコン弄り

(136)

友人

(63)

IT

(160)

飲食

(134)

書評

(14)

My ブログ

(297)

BBC

(7)

健康

(7)

Comments

RandyMaync@ заказать прогон сайта по трастовым сайтам подарок онлайн смотреть <small> <a hre…
JesusDrype@ Наркологическая клиника в Красноярске: полезная информация Абстиненция развивается после прекращен…
Terryintem@ Клиника Частный Медик 24. Стационар Вызвать нарколога на дом стоит не тольк…
Robertalila@ Кому повезет в 2026 году, китайский гороскоп Китайские звёзды 2026: только три знака…
2007年08月26日
XML
カテゴリ: IT
死後賭の一環で、なぜか ANTLR について勉強したので、備忘録、備忘録。

ANTLR は、オープンソースの Parser/Lexer フレームワークとでもいうんでしょうか。例えば、自分でプログラミング言語を自分で作って、それを java に変換するとかいうことが、やろうと思えばできる。

まー、ソフトウェアのユーザーという立場では、まず使うことがないであろうと思われる。O/R マッピングフレームワークの Hibernate とか、 SOA 企業 BEA の java アプリケーションサーバー製品である WebLogic Server とかで内部的に使っているようですね、ANTLR。



#ちなみに、java ベースのビルドツールである Apache Ant とは何の関係もないです。



ANTLR を使ってみる

とりあえず、このサイト様で使われている expr.g という ANTLR のサンプルを使うことを前提に以下のような Servlet のソースコードを作成してみました。
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class AntlrServlet extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    this.doPost(req, res);
  }

  public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

    System.out.println("Now parsing with Antlr.");

    String formula = req.getParameter("formula");

    ByteArrayInputStream str = new ByteArrayInputStream(formula.getBytes());

    res.setContentType("text/html; charset=iso-8859-1");
    PrintWriter out = res.getWriter();
    String msg = "correct";

    out.println("<HTML>");
    out.println("<BODY>");

    try {
      ExprLexer lexer = new ExprLexer((InputStream)str);
      ExprParser parser = new ExprParser(lexer);
      parser.expr();
    } catch (Exception ex) {
      msg = "<b>in</b>" + msg;
      ex.printStackTrace();
    }
    out.println("<H1>Your formula looks " + msg + "!</H1>");
    out.println("</BODY></HTML>");
  }
}


で、後はは以下のような FORM 入りの html で上述の Servlet(AntlrServlet として登録)を呼び出してやればよいというわけで。
<html>
<head>
<title>Antlr sample</title>
</head>

<body bgcolor="#ffffff" LEFTMARGIN="10" RIGHTMARGIN="10"
  link="#3366cc" vlink="#9999cc" alink="#0000cc">

<h1>Please input some mathematical formula as you like</h1>

<FORM NAME="name1" METHOD="POST" ACTION="./AntlrServlet">
<INPUT TYPE="FORMULA" NAME="formula"></INPUT>
<INPUT TYPE="SUBMIT" VALUE="SUBMIT"></INPUT>
</FORM>

</body>
</html>


へっへーい。ただ動かしただけで、あまり勉強になってないぜー。ぐはぁ。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2007年09月01日 10時56分26秒
コメント(0) | コメントを書く
[IT] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: