トレースタスク(関数グラフの作成) - ページ 5

 
jartmailru:
静的コード解析...実行は必須ではありません。

もう一つの選択肢として、テキストをパースすることを考えていました。
でも、何から手をつけていいのかもわからない。

 
tara:

お好きなようにどうぞ。

誤った手段を選択することは、プロフェッショナリズムに欠ける。
 
MetaDriver:

この 問題が解決不可能であることは明らかではないでしょうか。こうすることで、算術()[] と演算子{}の 括弧のペアをなくし、1つの開き括弧に置き換えることができるのです。弱すぎますかね?

;)

なぜか。

結局のところ、単項演算もたくさんあるのです。


jartmailru
誤った手段を選択することは、プロフェッショナリズムに欠ける。

何をプログラムするかで、どんな違いがあるのでしょうか?どんなビジネスでも重要なのは、ソリューションマトリックス です。
それ以外のことは関係ない。
 
jartmailru:
静的コード解析...実行は必須ではありません。
コードを関数(ブロック)に分割し、誰が誰を呼んでいるのかを分析するのです。

私も同じようなことを考えています。ただ、プログラム全体を徹底的に解析して、山とニキビを分けなければならないのですが......。

そして、主人公には必要ないようです、私の推測が正しければ、ファクトにコールをプリントする必要があるようです。呼び出しの条件が成立した場合とか。

 
sergeev:

もう一つの選択肢として、テキストを解析することを考えていました。つまり、MQLを解析してプログラム構造を作るということです。
しかし、その実装をどこから始めればいいのかもわからない。

初歩的なことですが。
関数とは何ですか?
.
[単語スペース / ないかもしれない】単語機能名 括弧「(」、そこに何か、括弧閉じ「)」。)
カーリーオープナー
.
いくつかのコード
中括弧 {, }
.
カーリークロージング}
.
第一部は終了しました。
 
sergeev:

:))

最初の投稿を読むと、タスクは、ソースコードの各関数に、"{"のすぐ後に、サービス関数を1つだけ追加することです。

しかし、そのような方法で、すべてのソースコードの通路を取得し、コールツリーを構築します。

この場合、ソース関数の入力パラメータや、その結果、コード内部は一切変更されません。



純粋なトレースのことではありません。それは、関数のグラフを構成することだけです。

以下はログの抜粋です。

01:45:18 CTA0 USDCHF,H1: loaded successfully
01:45:18 CTA0 USDCHF,H1 inputs: BarsBeforeActivate=1; BarsBeforeConfirm=0; TraceIsAllowed=true; IsStaticMode=false; ClearAtFinish=true; ExcludeFirstBar=false; ExcludeLastBar=true; RasingLinesColor=(0,128,128); ReducingLinesColor=(255,0,255); 
01:45:18 CTA0 USDCHF,H1: Init
01:45:18 CTA0 USDCHF,H1: Init=>NewBar(DeadLine)
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>InitType
01:45:18 CTA0 USDCHF,H1: Init=>DeleteGroup(Init)
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup=>ClearTrend
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup=>ClearTrend=>ClearTrace
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup(Empty)
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup(Empty)=>ClearTrend
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>ClearGroup(Empty)=>ClearTrend=>ClearTrace
01:45:18 CTA0 USDCHF,H1: Init=>LoadGroup(ClearScreen)=>SaveGroup(Empty)
01:45:18 CTA0 USDCHF,H1: Init=>PaintGroup(ClearScreen)
 
sergeev:

なぜか。

何しろ単項演算が少なくないのだから。

さて、この演算は明らかに単項演算ではありません。静的テキスト解析における "入れ子状態 "は単項目である。ダイナミックトレースではバイナリーです。INPUTとOUTPUTがあります。

ないですか?

 
MetaDriver:

私も同じようなことを考えています。ただ、プログラム全体を徹底的に解析して、山とニキビを分けなければならないのですが......。

そして、それはスターターが必要とするものではないようです。私の直感が正しければ、彼は事実上の呼び出しをプリントアウトする必要があります。呼び出しの条件が揃えばね。

解析の際、実際の呼び出しはそれ自体で検出されます。誰が誰と、どこから・・・。

ということで、今のところ、これが唯一の完全解決案です。

 
山」「ニキビ」と同様に「徹底的な」解析が行われていない...。
.
ところで...追加します。
.
- まず、プログラムテキストは「レキサー」によって分析される。
レキサは、プログラムテキストを「トークン」に打ち込む。
私たちの場合、トークンは
.
- 空白 - スペース、タブ、行末など-
我々はフォーマッタを書かないので、このようなものは無視します。
- 括弧 ( / )
- ブラケット [ / ]です。
- 括弧 { / } をつける
- 演算子 + - / *
- ワイルドカード ;,
それ以外のものは基本的に識別子である
(数字もこのグループに入りますが、気にしないことにします)。
.
パース・レキシングを 行う際、型が
struct { typeToken, stringToken }.
.
パースには、アタッチメントのタイプである
struct Tocken { typeToken, stringToken, list<Token> list of nested tokens }.
でも、ここはもっとシンプルに考えてもいいんじゃないでしょうか。
.
そして、先ほどのグループ分けを行う。些細なことですが
.
実はレキサー+パーサーの組み合わせは、このジャンルの古典的なものなんです。
lex/flex/bison/ant-lrについては、(私も名前を知らない;-D)-を助言することはできません。
まさにハンドメイドと書きました。
 

OK、皆さん、討論をありがとうございました。