読者です 読者をやめる 読者になる 読者になる

言語のしくみを読む

パーサで解析されたスクリプトは構造体のリンクで表現されたノードで返される。 state.lvalにつながれたリンク。 node(node_value) type:NODE_STMTS void** data node(node_op) type:NODE_OP op:strm_string len:1 ptr:“|” lhs: node(node_values) type:NODE…

言語のしくみを読む

./strem ../examples/02hello.strmで実行 main.cのmain関数内のnode_parse_file(&state,argv[i])で止める node.c内のnode_parse_file(parse_state p,const char fname) fnameにはコマンドライン引数"../examples/02hello.strm"が入っている fnameで指示され…

言語のしくみを読む

node_run関数 strm_seq_init(),strm_socket_init()が準備を完了させたら 次に呼ぶのがexec_expr関数で、渡されたnodeをswitch文で分岐させながら taskを作ってキューに登録する。登録されたtaskはqueue.cのstrm_queue_exec関数が 実行を行っている。 キュー…

言語のしくみを読む

main関数からstrm_var_def関数を呼び出す 引数の"ARGV"はstrm_stringに保管されてる、av変数にはコマンドラインの 引数が入っているので"ARGV"の名前で保管される。 次はnode_run関数を呼ぶ //exec.c node_init関数内でstrm_var_def関数を使ってシンボルをハ…

言語のしくみを読む

main関数から読んでいく $ ./streem ../examples/02hello.strm main関数 オプション処理部はパスして node_parse_init(&state) //node.c state構造体の初期化 e_progはNULLなのでelse節以降を実行、引数を持っているので最後のelse節を実行 for(i = 1;i < ar…

言語のしくみを読む

Cの開発環境を整備 ソースの分量が増えてきたのでエディタだけで読むのが困難になってきたので Cの統合環境を入れることにした。 最初はeclise C/C++ Linuxを入れたが使い方がわからず。 次にNetBeans IDE 8.2 C/C++ Linuxを入れたところ比較的わかりやすく …

言語のしくみを読む

2-7AST(抽象構文木)に変換 今回はsrcフォルダーに大幅に追加がなされた。 早速makeしてみるが、node.cコンパイル中にy.tab.hがないとエラーが出ている。 Gitで次のtag(201507)に行ってみるとy.tab.hがあったので201506は無視して201507tag で実行。 binフォ…

言語のしくみを読む

2-6キャッシュとシンボル stringを生成するためのstruct sym_keyが新たに定義されている。 渡された文字列の特徴からハッシュ値を取り出している。 これがシンボル検索の高速化に寄与しているのかな? khash.hが新規に追加,string.cが大幅な書き換えとなって…

言語のしくみを読む

2-5マルチスレッドとオブジェクト core.cのstrm_loop関数を中心にマルチスレッド対応になっている。 queue.cにpush_high_task,push_low_task関数が追加などの変更がある。 ncpu.c,string.c,value.cが新規で入っている srcフォルダにも新規ファイルが入ってい…

pythonのソースコードを調べる

Objectsフォルダの中身を調べる それっぽい名前としては boolobject.c bytearrayobject.c bytesobject.c cellobject.c classobject.c codeobject.c complexobject.c descrobject.c dictobject.c enumobject.c fileobject.c floatobject.c frameobject.c func…

言語のしくみを読む

2-4イベントループ Gitkrakenのタグを201503に移動させてlibフォルダを見ると main.c core.c io.c queue.cがはいており $ makeでa.outファイルができた。 $ ./a.outで入力待機状態になったようなのでstreemと 入力するとSTREEMと標準出力に表示された。 停止…

言語のしくみを読む

2-3文法チエッカーをまず作る Ubuntu16.04LTS(64bit)にGitクライアントのGitKrakenをinstallした。 GitKrakenに https://github.com/matz/streemをクローンさせて手元にリポジトリを作る 最初のタグ201502に移動してResr master to this commit>Hard-discard…

pythonのソースコードを調べる

この構造体のメンバーには接頭子tp_が付けられている。 typeobjectの頭文字と予想される。 typedef struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "<module>.<name>" */ #この構造体の名前を要求されたときのフォーマット? P</name></module>…

pythonのソースコードを調べる

もっとも頻度の高いキーワードPyObjectは Includeフォルダのobject.h内に定義してある 構造体でした。 postd.cc Pythonの全てのオブジエクトの元になっている構造体である。 マクロを展開すると typedef struct _object { struct _object *_ob_next; struct …

pythonのソースコードを調べる

Cファイルからインクルードしているヘッダファイルを調べる def iter_docs(file): """ 指定したCファイルにインクルードされているヘッダファイルを返す """ for line in file: if line.startswith("#include"): #include文に続くヘッダファイル名を抜き出す…

pythonのソースコードを調べる

ファイル内の単語頻度をしらべる def freqdist_count(path_name): """ 指定したpath_nameを読み込んで、そのテキスト内単語の頻度を表示する """ count_dic = {} for path in path_name[:]: with open(path,"r") as f: text = f.read() #コメントを削除(複…

pythonのソースコードを調べる

179のファイルがどのフォルダーに分布しているのか調べた。 import glob import os c_file_list = ["_bisectmodule.c","_codecsmodule.c","_collectionsmodule.c","_csv.c", "_functoolsmodule.c","_heapqmodule.c","_json.c","_localemodule.c", "_lsprof.c…

pythonのソースコードを調べる

python.org.download/sourceでpython 3.5.3rc1 2017-01-03をダウンロード デリクトリ構造 D:. ├─Doc │ ├─c-api │ ├─data │ ├─distributing │ ├─distutils │ ├─extending │ ├─faq │ ├─howto │ ├─includes │ │ └─sqlite3 │ ├─install │ ├─installing │ ├─libra…

言語処理100本ノック

40. 係り受け解析結果の読み込み(形態素) 形態素を表すクラスMorphを実装せよ.このクラスは表層形(surface),基本形(base),品詞(pos),品詞細分類1(pos1)をメンバ変数に持つこととする.さらに,CaboChaの解析結果(neko.txt.cabocha)を読み込…

言語処理100本ノック

39. Zipfの法則 単語の出現頻度順位を横軸,その出現頻度を縦軸として,両対数グラフをプロットせよ. %matplotlib inline import re from collections import Counter sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: lin…

言語処理100本ノック

38. ヒストグラム¶ 単語の出現頻度のヒストグラム(横軸に出現頻度,縦軸に出現頻度をとる単語の種類数を棒グラフで表したもの)を描け. %matplotlib inline import re from collections import Counter sentences = [] with open("D:\\nlp100\\neko.txt.me…

言語処理100本ノック

37. 頻度上位10語¶ 出現頻度が高い10語とその出現頻度をグラフ(例えば棒グラフなど)で表示せよ. import re from collections import Counter sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keit…

言語処理100本ノック

36. 単語の出現頻度 文章中に出現する単語とその出現頻度を求め,出現頻度の高い順に並べよ. import re from collections import Counter sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso …

言語処理100本ノック

35. 名詞の連接 名詞の連接(連続して出現する名詞)を最長一致で抽出せよ import re sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso = [] while line: if "EOS" in line: if len(keitaiso…

言語処理100本ノック

34. 「AのB」 2つの名詞が「の」で連結されている名詞句を抽出せよ. import re sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso = [] while line: if "EOS" in line: if len(keitaiso)>0: …

言語処理100本ノック

33. サ変名詞 サ変接続の名詞をすべて抽出せよ. import re sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso = [] while line: if "EOS" in line: if len(keitaiso)>0: sentences.append(ke…

言語処理100本ノック

32. 動詞の原形 動詞の原形をすべて抽出せよ. import re sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso = [] while line: if "EOS" in line: if len(keitaiso)>0: sentences.append(keit…

言語処理100本ノック

31. 動詞 動詞の表層形をすべて抽出せよ. import re sentences = [] with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr: line = fr.readline() keitaiso = [] while line: if "EOS" in line: if len(keitaiso)>0: sentences.append(keitaiso…

言語処理100本ノック

30. 形態素解析結果の読み込み 形態素解析結果(neko.txt.mecab)を読み込むプログラムを実装せよ.ただし,各形態素は表層形(surface),基本形(base),品詞(pos),品詞細分類1(pos1)をキーとするマッピング型に格納し,1文を形態素(マッピング型)…

言語処理100本ノック

27. 内部リンクの除去¶ 26の処理に加えて,テンプレートの値からMediaWikiの内部リンクマークアップを除去し,テキストに変換せよ(参考: マークアップ早見表). import json import re def wiki_selection(): with open("D:\\nlp100\\jawiki-country.json"…

言語処理100本ノック

26. 強調マークアップの除去 25の処理時に,テンプレートの値からMediaWikiの強調マークアップ(弱い強調,強調,強い強調のすべて)を除去してテキストに変換せよ(参考: マークアップ早見表). import json import re def wiki_selection(): with open("D…

言語処理100本ノック

25. テンプレートの抽出 記事中に含まれる「基礎情報」テンプレートのフィールド名と値を抽出し,辞書オブジェクトとして格納せよ. import json import re def wiki_selection(): with open("D:\\nlp100\\jawiki-country.json",encoding="UTF-8") as fr: wi…

言語処理100本ノック

24. ファイル参照の抽出 記事から参照されているメディアファイルをすべて抜き出せ. import json import re def wiki_selection(): with open("D:\\nlp100\\jawiki-country.json",encoding="UTF-8") as fr: wiki_line = fr.readline() while wiki_line: wik…

言語処理100本ノック

23. セクション構造 記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ. import json import re def wiki_selection(): with open("D:\\nlp100\\jawiki-country.json",encoding="UTF-8") as fr: wiki_line = fr.read…

言語処理100本ノック

21. カテゴリ名を含む行を抽出 記事中でカテゴリ名を宣言している行を抽出せよ. import json import re def wiki_selection(): with open("D:\\nlp100\\jawiki-country.json",encoding="UTF-8") as fr: wiki_line = fr.readline() while wiki_line: wiki_di…

言語処理100本ノック

20. JSONデータの読み込み¶ Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ. import json with open("D:\\nlp100\\jawiki-country.json",encoding="UTF-8") as fr…

言語処理100本ノック

19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる 各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ. from collections import Counter with open("D:\\nlp100\\hightem…

言語処理100本ノック

18. 各行を3コラム目の数値の降順にソート 各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい). fr = open("D:\\nlp100\\highte…

言語処理100本ノック

17. 1列目の文字列の異なり 1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ. fr = open("D:\\nlp100\\hightemp.txt",encoding="UTF-8") list = fr.readlines() fr.close() coll = set() for i in list: coll.add…

言語処理100本ノック

16. ファイルをN分割する 自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ import sys import math n = int(sys.argv[1]) fr = open("D:\\nlp100\\hightemp.txt",encoding="UTF-…

言語処理100本ノック

15. 末尾のN行を出力¶ 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ. import sys n = int(sys.argv[1]) fr = open("D:\\nlp100\\hightemp.txt",encoding="UTF-8") list = fr.readli…

言語処理100本ノック

14. 先頭からN行を出力¶ 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ. この問題を実行するためにVisual studio2013 にPython Tools for Visual Studioをインストールした。 import…

言語処理100本ノック

13. col1.txtとcol2.txtをマージ 12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを 作成せよ.確認にはpasteコマンドを用いよ. import csv fr1 = open('col1.txt',encoding='UTF-8') fr2 = open('…

言語処理100本ノック

12. 1列目をcol1.txtに,2列目をcol2.txtに保存 各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ. import csv fw1 = open("col1.txt","w",encoding='UTF-8') fw2…

言語処理100本ノック

11. タブをスペースに置換 タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ fr = open("hightemp.txt",encoding='UTF-8') fw = open("hightempw_replace.txt","w") for line in fr: line = line.…

言語処理100本ノック

第2章: UNIXコマンドの基礎 hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で 格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ. さらに,同様の処理をUN…

Eclipse完全攻略を読む

読了 7、8、10章は省いた

言語処理100本ノック

09. Typoglycemia スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに 並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする. 適当な英語の文(例えば"I couldn't be…

Eclipse完全攻略を読む

1,2章読み終わり 機能たくさんありすぎ

パーフェクトjavaを読む

読み終わり