awk4j とは
The AWK~plus Programming Language
AWK~plus は、プログラム言語AWK言語仕様と GNU GAWKの主要な拡張機能、 型推論と関数型プログラミングによるシンプルな外観、 言語レベルでのロックフリーでスレッドセーフな並列プログラミング、 動的と静的な型システムをサポートする 次世代スクリプト実行環境です。
最新の言語仕様を実装した AWK~plusによる、新しいスクリプテイングの世界を体験ください。
AWK~plus Scripting for Android
AWK~plusインタプリタ環境を組み込んだランチャーは、 Android マーケットから入手可能です。
awk4j (AWK for Java platform)
awk4j は、 GNU AWK 互換の言語処理環境で、 AWKスクリプトを、中間言語としてのホスト言語 ( Java, JavaFX, JavaScript, BeanShell, Groovy, Python, Scala ) に変換するトランスレータ方式で動作します。
AWK 言語 | AWK コマンド (gawk, awk95など) | |||||||||
ホスト言語 | Java | JavaScript (JSE6) | JavaScript (Rhino) | JavaFX | BeanShell | Groovy | Python | Scala | ||
トランスレータ | AWK スクリプトを ホスト言語に変換するトランスレータ | |||||||||
インタプリタ | - | gij | jrunscript | Rhino interpreter | - | BeanShell interpreter | Groovy interpreter | Jython interpreter | Scala interpreter | |
コンパイラ | javac, dx | gcj, javac | javac | - | Rhino compiler | javaFX compiler | - | Groovy compiler | (Jython2.2.1) | Scala compiler |
実行環境 | Android | GCJ | Java (JSE6) | Java (JRE6) |
Tips
awk4j の入力ファイルは、 URL 指定が可能で 一般ファイルと同じインターフェイスで読み込みが可能。 詳細は、 さあ始めよう を参照。
世界最短 1文字スクリプト、 ホームページをワンライナー (one-liner) で閲覧。
スクリプト '1'
は、C言語のTRUEと同じ意味。
'1==1 {print $0;}'
または '{print $0;}'
の省略形で入力データを無条件に出力する。
$ AWK4J -e '1'
'http://awk4j.sourceforge.jp/home.html#utf-8'
ちなみに 2文字なら 'NF'。
'0!=NF {print $0;}'
の省略形で入力データのフィールド数が 0 でなければ出力する。
$ AWK4J -e 'NF'
'http://www.yahoo.co.jp/#utf-8'
Scala サポート (1文字スクリプトのGUI版)。
#%
import scala.swing.{MainFrame, ScrollPane, Label}
{ basename = FILENAME; result = result $0
}
END { IGNORECASE = 1
gsub(/<(!|meta)[^>]+>/, "", result); sub(/^.*<html[^>]+>/, "<html>", result)
sub(/<head>/, "<head><base href='" basename "' />", result)
#% val top = new MainFrame {
#% preferredSize = new java.awt.Dimension(880, 480); title = "awk4j - Browser (Scala)"
#% contents = new ScrollPane {
#% contents = new Label(""+ result)
#% }
#% }
#% top.pack()
#% top.visible = true
}
#% override def run__ = onEDT__ // executed on the Swing event dispatching thread.
{ basename = FILENAME; result = result $0
}
END { IGNORECASE = 1
gsub(/<(!|meta)[^>]+>/, "", result); sub(/^.*<html[^>]+>/, "<html>", result)
sub(/<head>/, "<head><base href='" basename "' />", result)
#% val top = new MainFrame {
#% preferredSize = new java.awt.Dimension(880, 480); title = "awk4j - Browser (Scala)"
#% contents = new ScrollPane {
#% contents = new Label(""+ result)
#% }
#% }
#% top.pack()
#% top.visible = true
}
#% override def run__ = onEDT__ // executed on the Swing event dispatching thread.
News
- awk4j Android サポート - 2011/05/9
・ Android 3.0 での文字列リソース定義仕様の変更に対応 - AWK~plus 1.0.3 - 2010/11/13
ライブラリを Scala 2.8.1 final に更新 - AWK~plus 1.0.2, awk4j 1.6.4 - 2010/10/30
- `The AWK~plus Programming Language' を新規リリース - 2010/9/11
- 1.6.3 - 2010/3/22
・ Android 2.1 r1 SDK, Groovy 1.7.1, JavaFX 1.2.3 SDK, Scala 2.8.0.Beta1-prerelease - 動作確認
- 1.6.2 - 2009/12/5
・ Android 2.0 r3 SDK, Gcj 4.4.1 - 対応
・ Groovy 1.7-RC-1, Jython 2.5.1 final, Scala 2.7.7 final - 動作確認
- 1.6.1 - 2009/10/4
・ Scala 2.7.7 RC1 対応 (Scala サポート)
トランスレータ出力コードの最適化, for(in){break/continue} 対応
- 1.6.0 - 2009/9/26
Scala - HOST言語として新規サポート (Scala サポート)
Android 1.6 r1, JavaFX 1.2.1, Groovy 1.6.4, Python(Jython) 2.5.1 rc3 - 動作確認 - 1.5.7 - 2009/8/18
リファクタリング実施による安定化バージョン - 1.5.6 - 2009/7/20
Android 1.5 SDK, Release 3, Python(Jython) 2.5.0 final - 動作確認
GCJサポート - リファクタリングの実施により Javaプラットフォームとの互換性が向上 - 1.5.5 - 2009/6/7
JavaFX 1.2 SDK - New, Linux サポート (JavaFX サポート)
Android 1.5 SDK, Release 2, Groovy 1.6.3, Python(Jython) 2.5rc3, Rhino 1.7R2 - 動作確認
トランスレータによる正規表現の変換により GNU AWK との互換性が更に向上した - 1.5.4 - 2009/5/17
Android 1.5 SDK, Release 1 - 日本語表示に関する問題対応 (Android サポート)
Python(Jython) 2.5rc2 - PythonスクリプトのUNICODE化による日本語対応 (Python サポート)
パフォーマンスチューニングの実施 (GCJ サポート) - 1.5.3 - 2009/3/15
Android 1.1 SDK, Release 1 対応 (Android サポート) - 1.5.2 - 2009/2/28
JavaFX 1.1 SDK, 対応 - 1.5.1 - 2009/1/9
ドラッガブル アップレット サポート (Java, JavaFX, Python) - 1.5.0 - 2008/12/21
- Python(Jython) 2.5beta0 新規サポート (Python サポート)
- JavaFX 1.0 SDK, 正式版, 新言語仕様対応 (JavaFX サポート)
- Android 1.0 SDK, Release 2 動作確認 (Android サポート)
- 1.4.1 - 2008/11/10
Android 1.0 SDK. Release 1, SQLite JDBC サポート (Android サポート) - 1.4.0 - 2008/10/19
Android 1.0 SDK. Release 1 対応 (Android サポート) - 1.3.3 - 2008/9/15
マンデルブロ集合サンプルを修正 (キャッシュ制御の見直しによるズーム性能改善) (JavaFX サポート) - 1.3.2 - 2008/9/11
JavaFX プレビュー版 (javaFX sdk-1.0-pre1) 対応、 Linuxは不可(SDKなし) (JavaFX サポート) - 1.3.1 - 2008/4/25
サンプルおよびドキュメントを改定 (JavaFX サポート)
Linux, Ubuntu 8.04, GCJ 4.2.3 で動作確認 (GCJ サポート) - 1.3.0 - 2008/4/1
JavaFX (JavaFX Script 20071008) に対応 (JavaFX サポート)
AWKスクリプトが JavaFX で実行可能となった - 1.2.0 - 2008/2/19
GCJ (GNU Compiler for Java) に対応 (GCJ サポート)
AWKスクリプトを Javaソースに変換し、ネイティブマシンコードでの実行が可能になった - 1.1.0 - 2007/10/22
一般ファイルインターフェイスでの SQL文実行 (SQL スクリプティング)
帰ってきた一行野郎 AWK4J -e '1' 'jdbc:somerdb:somedb;;SELECT * FROM TABLE' - 1.0正式版 - 2007/09/09
Linux Ubuntu (ウブントゥ) Unicode 環境での動作を確認
ネットワーク通信をサポートする拡張機能の追加 (言語仕様および LL. じゃんけん2.0対戦 参照) - 1.0.beta9 - 2007/07/31
ライセンスを The GNU General Public License Version 3(GPLv3) に変更
ソケット通信機能 (TCP/IP, UDPソケット) を実装した
ソケット通信をサポートするための拡張機能を実装 (スレッド, タイマー, コード変換など)
サンプルに daytime, echo, http, Lightweight Language じゃんけん 2.0 対戦プログラムを追加 - 1.0.beta8 - 2007/06/10
Linux 環境の GNU AWK 互換のため printf で表示する指数部の最小表示桁数を可変とした
[-]d.dddde±[d]dd 省略値は 2桁 ex. 3.4e+12 (プラトフォーム依存) - 1.0.beta7 - 2007/05/20
プログラム構造の視覚化 サンプルとして、DOT言語(Graphviz) にて AWK構文解析部をグラフ化 - 1.0.beta6 - 2007/05/04
呼び出し元で配列操作を行っていない配列を、関数に渡す場合のスコープ問題を解消 - 1.0.beta5 - 2007/05/02
構文解析の問題を修正 (print $+i, $- -i, one != one = 1; など) - 1.0.beta4 - 2007/04/07
switch文 および 組み込み変数 ERRNO の実装により GNU AWK との互換性を向上
switch (expression) { case expression or パターン: statement [ default: statement ] } - 1.0.beta3 - 2007/03/15
トランスレータが副作用を伴う配列代入文を正しく変換するよう修正
ex. array[--ix] += value; 代入演算子: (+= -= *= /= %= ^= **=) - 1.0.beta2 - 2007/03/08
ビット操作関数 (and, or, xor, compl, lshift, rshift) を実装 (GNU AWK互換)
AWKスクリプトで 8, 16進の数値定数の定義を可能とした (GNU AWK互換)
正規表現 /./ が改行 "\n" にマッチするようになった (POSIX仕様) - 1.0.beta1 初リリース - 2007/02/28