3

静的 Java コンパイラーとして知られる Java コンパイラーのサブセット用の ANTLR 文法が与えられました。文法を拡張して、Java の機能をさらに含めようとしています。たとえば、 For Loopsの文法を追加しました。

Eclipse と ANTLR プラグインを使用して、「ANTLR 文法のコンパイル」を行いました。コンパイルする代わりに、コードの最初のビットで 2 つのエラーが発生しました。

grammar ExtendedStaticJava;

options { backtrack=true; memoize=true; }

@header
{
package sjc.parser.extended;
import java.math.BigInteger;

/**
 * Extended StaticJava parser.
 * @author <myname>
 */
}

// the rest of the grammar has been excluded.

最初のエラーは 1 行目にあります: 'Unexpected Token: grammar' 2 番目のエラーは 5 行目にあります: 'Unexpected char: @'

この基本的な ANTLR 構文を認識しないのはなぜですか? 私の最初の考えは、クラスパスに何かが欠けているということでしたが、プロジェクトのプロパティに移動し、次の JAR がLibrariesに含まれていることを確認しました。

  • antlr-2.7.7.jar
  • stringtemplate-3.2.1.jar
  • antlr.jar
  • antlr-runtime-3.0.1.jar

アイデアや提案はありますか?

4

3 に答える 3

5

antlr-2.7.7.jar間違っています: あなたの文法は ANTLR v3+ 構文です。すべて削除する:

  • antlr-2.7.7.jar
  • stringtemplate-3.2.1.jar
  • antlr.jar
  • antlr-runtime-3.0.1.jar

プロジェクト/クラスパスからこのANTLR v3 JARのみを貼り付けます(必要なものがすべて含まれています:ランタイム、文字列テンプレート、作品!)。

幸運を!


編集

個人的には、Ant ビルド スクリプトを使用して IDE 統合を行っています。次のようなレクサーとパーサーを生成します。

<target name="generate.parser" depends="init" description="Generates the lexer, parser and tree-walker from the grammar files.">
    <echo>Generating the lexer and parser...</echo>
    <java classname="org.antlr.Tool" fork="true" failonerror="true">
        <arg value="-fo" />
        <arg value="${main.src.dir}/${parser.package}" />
        <arg value="${parser.grammar.file}" />
        <classpath refid="classpath" />
    </java>
    <!-- snip -->
</target>

そして次のようにclasspath refid見えます:

<path id="classpath">
    <!-- snip -->
    <fileset dir="lib">
        <include name="*.jar" />
    </fileset>
</path>

ディレクトリにはANTLR v3 JARが含まれていlib/ます(他のANTLR JARはありません!(それを叩いてすみません:)))

于 2011-03-08T19:54:46.687 に答える
2

AntlrEclipse プラグインがインストールされている可能性があります。これは確かにAntlr 2.7.somethingを使用しています。ただし、v3、Antlr IDEで動作するプラグインが利用可能です。このプラグインは、Antlr バージョン (3+) を構成でき、鉄道ビューを表示でき、インタープリターを備えているため、もう少し高度です。

Eclipse Juno を使用している場合は、4.0.0 が antlr プラグインの新機能であるため、Indigo リポジトリーから DLTK をインストールする必要があります。

于 2012-08-21T09:37:30.217 に答える
1

私もこの問題を抱えていました。

antlr を実行しようとしたときのある時点で、あるバージョンの jar ファイルをクラスパス Windows 環境変数に追加しました。このエントリを削除したところ、問題が解決しました。

于 2012-01-03T17:17:55.110 に答える