3

java.awt.Graphicsクラスのメソッドを次のようなコマンドに移植するスクリプト言語の開発に取り組んでいます

setcolor_0,127,214,255 //R,G,B,アルファ
また
fillrect_50,25,100,75 //x,y,w,h
これにより、特定の画像を作成するたびにプログラム全体を作成する必要がなくなりました。言語自体は現在、疑似関数とコマンド (Graphics メソッド呼び出しに直接マップされている)、および各スクリプトのヘッダーとしていくつかの出力指定子に制限されていますが、さらに追加したいと考えています。スクリプトは、パーサーとインタープリターの両方として機能する 1 つのプログラムで処理されますが、入力文字列を直接処理する私の方法は、私がやりたいことには不十分です。

パーサージェネレーターとレクサージェネレーターをたくさん検索して見つけましたが、パーサージェネレーターで同じ2つの問題に遭遇し続けています。

  1. 生成されたパーサーは、ジェネレーターのみが提供できる何らかの形式のランタイム依存関係 (/-ies) を必要とします (例:独自のランタイム ファイルを必要とするBeaverの製品)、または
  2. ジェネレーターが完全に開発されていないように見えるか、そうでない場合でも、ジェネレーターは少なくとも 1 つの好ましくない仮定を行っています。(例: Jayのクラス マーキングを囲むことなくソース コードを生成する方法と、すべてのクラスが同じファイルにあるという仮定。)

したがって、これらのことを回避することに加えて、オープンなドキュメントがたくさんあり (これが ANTLR を避けたい理由です)、Java ソース コードを出力するパーサー ジェネレーターを探しています (出力は可能な限り新しいバージョンの Java を使用する必要がありますが、それは私にとってはあまり重要ではありません)。

tl;dr: パーサージェネレーターが必要です:

  1. たくさんのドキュメント (外部またはそれ以外) と一緒に無料で利用できます。
  2. パーサーを構築します
    1. 実行するために外部依存関係を必要としない、
    2. Javaソースコードを出力します(これは最近のものであり(おそらく1.5以降と呼ぶかもしれませんか?)、読みやすいです)、および
    3. 適切にカプセル化されたクラスを生成します。

4

2 に答える 2

0

@Ira が言ったように、生成されたパーサーは少なくとも、一般的な解析オプションを簡単に呼び出すことができるランタイムに依存します。別の方法は、生成された各パーサーにまったく同じランタイム コードをコピーすることです。

とは言っても、JavaCC には実行時の要件が最も少ないと思います。そのライブラリからコピーできる CharStream クラスです。

残念ながら、生成されたパーサーの読みやすさは、ランタイムの機能に反比例します。ランタイムが短いほど、レベルが低くなり、可読性が低下します。

必要な Java 解析の範囲が限られていることを考えると、正規表現ライブラリだけで必要なことが達成できるかどうかを分析する必要があるかもしれません。

于 2013-07-02T14:48:21.957 に答える