def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]- プロジェクト
- 負の除算の切り下げを確認し、ゼロ除算、不完全なスタック、絶対値が10**18を超える中間値を拒否します。
- 適用前に確認
- 実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。
- モデル
- OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。
def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]パーサーを変える前に、式に許す動作を定義する
小さな言語でも式の処理には明確な境界が必要です。StackSundialはソースファイルと並べてその境界を議論するWindows向けAIコーディング環境です。プロジェクトを開き、実装変更を提案する前に、受け入れるトークン、評価規則、呼び出し側のエラー処理を接続モデルに確認させてください。
作業例は、内部の計算画面で使う後置記法の評価器のレビューです。許可する演算子、数値の上限・下限、不正な式への応答を指定します。要件をどこで強制しているか特定させ、不足箇所に範囲を絞った変更を提案させてください。別の評価器を生成するだけでなく、自分のソフトウェアを保守するための会話になります。
成功する演算と同じ注意を払って拒否経路を確認します。オペランド不足、余分な結果、ゼロ除算、許容範囲外の値についてプロジェクトのチェックを実行してください。交換法則が成り立たない演算のオペランド順序を確認し、意図したエラーが呼び出し側に届くか確かめます。評価ループが短くても、周囲の仕様を弱めるなら採用しないでください。
StackSundialはOpenAI互換またはAnthropicのエンドポイントへの接続に対応します。利用可能ならアブリテレーション済みAIモデルを選べますが、制限、コンテキスト上限、ツールは選択サービスに依存します。提案コードは確認と自分での検証の出発点であり、インタープリターが完成した証拠ではありません。
評価器の修正を採用する前に
- 作業の説明にはどの規則を含めるべきですか?
許可するトークン、オペランドの型、数値範囲、エラー時の動作を示します。失敗を利用者に表示する呼び出し側も含めてください。規則がなければ、通常の例を正しく計算しながら、本来拒否すべき式を受け入れる提案になる場合があります。
- 減算と除算を明示的にテストするのはなぜですか?
通常の加算と違い、結果がオペランド順序に依存するためです。順序を逆にすると結果が明らかに違うテストデータを使います。ゼロ除数への応答だけでなく、プロジェクトが必要とする除算規約も確認してください。
- 不正な式にはゼロを返すべきですか?
それが明示的なアプリケーション要件の場合に限ります。もっともらしい数値の代替値は不正入力を隠し得ます。明確な拒否経路を保つよう依頼し、有効なゼロの結果とエラーを呼び出し側がどう区別するか確認してください。
- トークン数の上限だけで評価を制限できますか?
中間値と受け入れる入力構造を含め、必要な制限すべてを確認してください。トークン数は仕様の一部にしか対応しません。評価ループを変更したら関連する拒否経路をテストします。
StackSundial · 更新日 2026-10-25