コマンド ライン オプションがどんどん追加されている今、オプションの設定方法と保存方法を一貫して処理する方法を見つけるときが来たように思われます。g95_optionこの目的のために、メンバーにコマンド ラインからのすべてのオプションが含まれる typedef-ed 構造体を追加しました。現在のオプションは現在そこにあります。
Niels Jensen は -pedantic オプションを追加するためのパッチを送ってくれました。これは私たちが絶対にしたいことだと思いますが、呼び出すだけではいくつか問題がありg95_warning()ます。ここではさらに作業が必要です。
古いスタイルのサイズ指定子をチェックするときに昨日追加したバグを修正しました。Niels Jensen と Tobi Schlüter の両方が修正用のパッチを送信しました。
Claus Fisher と Niels Jensen は、FORMATステートメントの解析に関連するバグを特定しました。Niels はバグを追跡し g95_gobble_whitespace()、踏みつけました。
Niels はまた、 andステートメントBLOCK DATAの修正と同様に、私が見落としてショックを受け たステートメントのマッチングのバグの修正も送信しました。 彼はまた、ステートメントにドル記号を使用できるようにするパッチを送信しました。OPENINQUIREFORMAT
Tobi Schlüter は保留中の 2 つのパッチを持っていますが、これらは少し大きく、より複雑なもので、複雑な定数とポインターの割り当てを一致させます。これらについては、すぐに説明します。
私のメールボックスは現在、管理可能な数の文字にまで減っています。願わくば、しばらくこの状況が続きますように…。
6月18日
状況は改善しています。私は最近 DSL 回線を購入しましたが、それを機能させようとすると、システムがいかに時代遅れであるかが明らかになりました。私は少なくとも 6 年前のバージョンの Slackware に基づいた x86 Linux 2.0.27 を実行していました。断片的に動作させるために何時間も試みた後、私は RedHat 6.2 を 16 ドルで購入し、すべてをテープにバックアップし、6.2 をインストールして、選択した部分をテープから取り出しました。現在、使用可能なシステムとネットへの高速でライブ接続があることを除いて、すべてが以前とほとんど同じように機能しています。人生は素晴らしい。
‘.e.’ という名前のユーザー オペレーター用に作成する必要があった 1 つの小さな例外を除いて、Steven Johnson のパッチの適用を完了しました。または「.d.」式のエラー診断が改善されました。g95_match_interface()また、アルファベット以外の文字を含む定義済みの演算子名を受け入れないように変更 しました。ずっと前に、なぜ標準がこれを指定したのかについて、私はかなり困惑したことを覚えています…
この問題に取り組んだ結果、IF ステートメントに重大な問題が発見され、 decode_statement()サブルーチンにも同じ重大な問題が発生しました。問題は、すべてのマッチャーがシンボル テーブルをいじることが許可されているという規則を順守できていなかったことです。オンMATCH_NO またはMATCH_ERROR任意の変更は呼び出し元によって元に戻されるという理解がありました。これは で常に発生していたわけではありません decode_statement()。
この規則は、単純な IF ステートメント (つまり、単一の実行可能ステートメントが続く IF 節) のマッチングに深刻な結果をもたらします。単一の実行可能ステートメントには、呼び出す必要がある独自のマッチャーがあります。次のキーワードを見てどのマッチャーを呼び出すかを区別できますが (シンボル テーブルには影響しません)、代入ステートメントが同じキーワードで始まる可能性があるという問題があります。発生していた問題は、シンボル テーブルが IF の制御式によって変更され、これらの変更が、異なるアクション ステートメントを連続して照合するプロセスで元に戻されていたことです。
はるかに慎重なアルゴリズムは、最初に IF 式を照合し、次に何が来るかを確認しようとします。それが算術 IF (Steven Johnson は、これがしばらく前に欠落していると指摘しました) または IF-THEN である場合、これらは単純に照合されます。これは、シンボル テーブルに影響を与えないためです。次に、代入ステートメントとの一致を試みます。これが機能しない場合は、シンボルを元に戻します (割り当ての一致と制御式によって構築されたものを取り除きます。その後、IF 式の部分を再一致させます (以前は機能していたので、成功することが保証されています)。 )、次に、次のキーワードをのぞいて、適切なステートメント マッチャーを呼び出して、残りが正しいかどうかを確認します。
Steven Johnson から送信された、他に何も存在しない場合に CHARACTER 宣言の長さを 1 に設定するパッチを適用しました。
Niels Jensen から送信された、文字定数マッチャーが MATCH_NO ではなく速すぎるエラーを生成したバグを修正しました。
Niels が送信した別の問題に関連する 2 つのバグを修正しました。配列参照の一致は、配列参照全体では正しく機能しませんでした。もう 1 つの問題は、サブルーチンに一致するリテラル定数が符号付きの数量に一致しないことでした。「-」も個別に照合する必要がある演算子であるため、マッチャは意図的にこのように記述されています。数値定数一致サブルーチンは、符号に一致するかどうかを示すフラグを取るようになりました。
誰かが 2 進数、8 進数、16 進数の整数のマッチャーを書きたい場合は、先に進んでください。
Tobi Schlüter から送信されたリテラル定数の一致に関する問題を修正しました。文字定数の種類パラメータが前にあり、有効な整数式であるため、マッチャーは整数定数の前に文字定数を照合する必要があります。
Niels Jensen から送信された、種類番号の割り当てに関するいくつかの問題を修正するパッチを適用しました。g95 では、複素数の種類数は実数の種類数と同じです。もう 1 つの明示されていない規則は、数値の種類の場合、種類の値は精度によって並べ替えられるため、k1>k2 の場合、k1 の方が精度が高くなるというものです。
Niels Jensen によって報告された、認識されない実際の変数に続く長さ指定に関する問題を修正しました。これは修正されました。
Claus Fisher さんは 3 つのバグ レポートを送信しました。1 つは初期化式を完全に評価できなかった (まだ作業中)、3 番目は整数の代わりに実数を読み取る問題で、その後に演算子が続き、今日の修正で修正されました。
サブルーチン X2
IF (A.EQ.-2) THEN
H=1
ENDIF
終わり
二項演算子に続く組み込み単項演算子について不平を言うエラーを生成します。このエラーは、A**-B などにフラグを立てることを目的としていました。この制限は数値演算子のみに適用されることがわかりました。この時点で、現在のサブルーチンを捨ててg95_match_expr()、標準が式の構成を説明する方法とより一致するものに置き換えることに誘惑されます。レベル 1 から 5 までの式は、それぞれ優先順位規則を自動的に生成するさまざまな方法で構成されます。これは、これらのルールを模倣しようとしている既存のかなり教科書的な中置パーサーとは対照的です。
非標準の *<number> 形式で種類を指定するためのサポートが追加されました。これは、標準の一部ではなかったことが判明しました。プラス面としては、g95 は私の論文プロジェクトを問題なくコンパイルできるようになりました…
まだ入れていないパッチがいくつかあります。明日はそれらにたどり着くようにします。