2016-07-21 5 views
-3

現時点でCommon LISPを学習していて、巨大なロードブロックに遭遇しました。 Common LISPでパーサを作成する方法を学ぶという課題がありました。私は文法のルールからレクサーまで、さまざまなソースからオンラインでたくさんの助けを借りてすべてを実装しました。私は反対に、シンボルテーブルを実装する方法を理解しているようです。Common Lispでシンボルテーブルをシミュレートする方法

これは私が今までシンボルテーブルに関して持っていたものです。

(defun symtab-add (state id) 
;; *** add symbols to symbol table *** 
) 

(defun symtab-member (state id) 
;; *** look up symbols in symbol table *** 
) 

(defun symtab-display (state) 
    (format t "------------------------------------------------------~%") 
    (format t "Symbol Table is: ~S ~%" (pstate-symtab state)) 
    (format t "------------------------------------------------------~%") 
) 

誰かが私にチュートリアルをリンクしたり、私のコード例を与えるか、またはちょうど私がスーパー感謝するでしょうこれで私を助けることができれば、唯一の表示部で管理アイブ見ることができるように。

私の割り当てのためのすべてのソースコード:http://www.cs.kau.se/cs/education/courses/dvgc01/LISP/newstart.lsp

+1

コードはここからです:http://www.cs.kau.se/cs/education/courses/dvgc01/LISP/newstart.lsp –

+0

「Common LISPでシンボルテーブルをシミュレートする方法」1) Common Lisp "ではなく" Common Lisp "(叫ぶ必要はありません)です。 2)Rainerが指摘するように、そのコードは他の場所から取得されます。投稿するコードに帰属を指定する必要があります。*自分のものであると主張するべきではありません。 3)なぜシンボルテーブルを "シミュレート"するのですか? 1つだけ実装したいのではないでしょうか?この表現は、Common Lispでシンボルテーブルを実装できないことを示唆しています。これは愚かです。 –

+0

はい、それは確かに私の割り当てですが、それが不明な場合はごめんなさい。わかりましたので、シンボルテーブルを実装したい(割り当ては単純なパスカルプログラムを解析することです)。あなたは私にいくつかの指針を与えたり、正しい方向に私を向けることができますか?このリンクからわかるように、未完成のコードを送信しました。それは私の任務です。シンボルテーブルを除いてすべてが実行されます。 – Joo223

答えて

-3

まずあなたがシンボルテーブルを作成する必要があります、と言う:

(setq my-symbol-table nil) 

それをシンプルに保つために、我々はパッケージを無視します。後ほどそれについて学ぶことができます。

次に、シンボルをテーブルに保存する方法を決定する必要があります。繰り返しますが、シンプルなままにしておけば、シンボル名とシンボル値の組でアソシエーションリストとして保存することができます。たとえば、あなたが値3と5とのシンボルAおよびBを格納する場合、次のシンボルテーブルを持っているでしょう:

> my-symbol-table 

> ((a . 3) (b . 5)) 

この連想リストを使用するには、関数ASSOC、プッシュ、rplacdを使用することができます。

例:

  • 新しいシンボルを追加

    (プッシュ「(C 0)私のシンボル・テーブル)

  • は、シンボルを検索:

    ( assoc'c my-symbol-table)

  • 既存のsyの値を変更するmbol:

    (rplacd私のシンボル・テーブルC(連想」)18)

私は、これはあなたが軌道に乗るには十分であると思います。

+2

'setq'は既存のバインディングを変更するためのものです。 'my-symbol-table'と' * earmuffs * 'はどこに定義しますか? – Sylwester

+0

OPの質問には、特定の値に関連付ける必要がある記号のようなものは見当たりません。それはちょうど "スコープ名"のリストである必要があるように見えました(これはレクサー/パーサーにはもう少し意味がありますが、純粋なレキシングや解析にはまだまだありますが、変数スコープなど)。 –

1

シンボルテーブルを実装する方法はいくつかありますが、ニーズに応じてさまざまなレベルの「目的に合った」ものが用意されています。終わりに、シンボルテーブルは事実上、「シンボル名」から何かへのマッピングに過ぎません。

したがって、物事を追加するだけでなく、物事を見ているようにすることができるデータ構造は機能するはずです。かなり一般的な実装は、「ハッシュテーブルを使用する」または「alistを使用する」(後者は基本的にフォーム(<symbol> . <data>)のペアのリストです)です。

+0

だから、ハッシュテーブルは行く方法ですか? Thatsの食べ物は、ハッシュテーブルとclispでaliveが見つかりました。答えをありがとう! – Joo223

関連する問題