Giter VIP home page Giter VIP logo

dentaku's Introduction

(いつか作る)俺々言語のテスト場所みたいなもの


-fオプションで色々計算方法を変えられる
どれで計算しても結果は同じ・・・なはず

- "stack"
  - スタックを使う
  - 構文木など作らずそのまま計算
- "parser"
  - yacc&lexを使って実装
- "recursion"
  - 再帰的に計算
  - 構文木は作らない


以下まったくの未実装 (というよりあんまりよく考えてない)

- "compile"
  - コンパイルしてから実行
  - 構文木を作る
  - トークンを全て読み込んでから式を評価していく
- "rpn"
  - RPN記法に並び替えて実行
  - 構文木は作らない



## そのた

make testでテストできるけどPerlのモジュールが色々必要
あとあまり大きな数を入力するとHDDがフォーマットされるのでやめてください

dentaku's People

Contributors

tyru avatar

Watchers

 avatar James Cloos avatar  avatar  avatar

dentaku's Issues

メモから

TODO & FIXME

  • 演算子は2文字以上の時も考えて、テーブルじゃなく木構造に情報を補完するべき

  • memory-manager.c, MemeryManager, mm_init(), mm_malloc(), mm_destroy()

  • Makefile

    I'm depending on GNU make :)
    SRC = $(wildcard *.c)

  • もっとin-placeにできないだろうか。トークンと数値型をもっと密にできないだろうか。

    • Valueという構造体にDigitとTokenを一緒に保存
    • Value構造体はValueTypeというenum型とDigitやTokenを保存できるunion型を持つ
  • -f stack

    • expression '+' can cause segfault!!
      • +の_allow_digit_がtrueの時数値を期待して不正なメモリにアクセスしてるバグなので
        dentaku-stack.cを_allow_digit_を使わないように書き換えればいい
    • dentaku-stack.c: EOFの場合は_lexer_get_token()_を呼び出さないようにする
  • lexer.c

    • レキサなんだから-1は-と1に分けて取得する
    • gotoを使っているあたりをstatic関数(できればinline)に分ける
    • 桁制限(MAX_TOK_CHAR_BUF)を無くす
      • 無くしたはいいものの制限設けておいた方がいいだろうjk
      • /usr/bin/bcだと100万桁でも表示できるけどメモリ大丈夫?
  • -f recursion

    • '2^32'がメモリ違反起こしてるっぽい
    • _dentaku_calc_expr()_が問題っぽい
    • _digit_destroy()_がないとメモリ確保と解放の数が合わない
    • ので多分_digit_destroy()_は関係ない
  • Digit構造体を_mpq_t_と_mpf_t_のunionにする

  • _al_malloc()_と_al_realloc()_はNULLが返った直後に_perror()_を呼び出してもいいことを明記する

  • トークンを先読みする_peek_token()@dentaku-recursion.c_などの関数をdentaku-core.cに入れる

    • -f stack(dentaku-stack.c)のためなんだけど、うまく共存できるだろうか
  • テストがこけてるの気づかなかった...

    • そんな時はgit bisect?
  • remove unnecessary functions?

  • それぞれ演算子用の関数にinlineつける?

  • op.cをdigit.cに統合?

  • !かNULLと比較するかどっちかにしろ

  • tok.strを直接いじるのは何かおかしい

  • _alloc_list_をマルチスレッド対応する

  • サイズを超えたら使われてない変数を解放する

    • これGCじゃん。ただGCとしてはコンパクションとかメモリ効率の点で少し劣るけど
  • ポインタを一つだけ解放できればいいので_list_remove_n()_にする

  • 実行時に-fオプション変えたい

  • バイトコードというか何らかの中間形式にしてから実行するものも作る
    バイトコードの種類はllvmとかparrotとかなんか色々
    (それより他の言語で計算できるようにする方が簡単そう)
    時代はやっぱレジスタマシンだよな・・・

  • APL言語から面白い演算子を持ってくる

  • -f bytecode=...とかオプション取れるように

  • DBL_MAX(そんなんあったっけ?)より大きい時のみGMP使う

  • 違うディレクトリにあるライブラリを使う場合はMakefileにrsyncする設定書いとくと楽?

    • Makefileにベタ書きするとパスが分かっちゃうので.gitignoreとか使ってうまくやる
  • あとGCによる領域確保を行わないでもalloca()的な動作ができるとうれしいかもしれない。
    関数を抜けた時点で_copy_function_で確保した領域が解放されるような。

  • シンタックスツリーをdeparseする
    空白などのオプションもつけられる
    最適化された後か前か選べる

  • GUIつけたい(w

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.