[pukiwiki]
先に一行ニュース
*[[ググる:ピエゾフィルム スピーカー]]
Emorningに登場したセンサー素材 「ピエゾフィルム」
逆に、電気を流すと、無職透明で極薄のスピーカーにもなるみたいです!?
*[[スタートレックな壁紙:http://www.ohgizmo.com/2009/04/07/turn-your-room-into-the-starship-enterprise/]]
$187なり。円安になったから、1万9千円弱?
*[[仮面ライダー新1号変身ベルト(島本和彦):http://simamotoblog.zenryokutei.com/?eid=949964]]
オチで噴きました。
—-
*PythonでLisp(S式)解析
他の作業をしなきゃいけないので、とりあえず出来たところまでメモ。
[/pukiwiki]
—-
PythonでS式を解析するコードを書いたのは、世界で何千人目(何万人目?)だろうと思いつつ。。。
あとで、他の人の記事を漁りますー
import re import sys symboldict = dict( LBracket=r"(?P<LBracket>\()", RBracket=r"(?P<RBracket>\))", Blank=r"(?P<Blank>[\s\n]+)", Symbol=r"(?P<Symbol>[a-zA-Z_]+\w*)", Int=r"(?P<Int>[-]?\d+)", Float=r"(?P<Float>[\+-]?\d+\.*\d*([eE]+[+-]?\d+)?)", Quote=r"(?P<Quote>\')", ) anytoken=re.compile("("+"|".join(symboldict.values())+")") class SpecialForm(object): def __init__(self,name): self.name=name def __repr__(self): return "%s"%self.name class SpecialFormList(list): def __init__(self,namelist=[]): for x in namelist: self.append(x) def append(self,x): list.append(self,x) self.__dict__[x]=SpecialForm(x) sp=SpecialFormList() sp.append("quote") class Parser(object): def __init__(self): self.init() self.switch=dict( LBracket=self.LBracket, RBracket=self.RBracket, Blank=self.Blank, Symbol=self.Symbol, Int=self.Int, Float=self.Float, Quote=self.Quote, ) def init(self): self._root=[] self._list=[self._root] def parse(self,txt): anytoken.sub(self.callback,txt) def callback(self,x ): d=x.groupdict() stat=[k for k in d if d[k]][0] v=d[stat] #print stat,v self.switch[stat](v) def LBracket(self,v): mylist=[] self._list[-1].append(mylist) self._list.append(mylist) def RBracket(self,v): self._list.pop() def Symbol(self,v): self._list[-1].append(v) def Quote(self,v): self._list[-1].append(sp.quote) def Float(self,v): self._list[-1].append(float(v)) def Int(self,v): self._list[-1].append(int(v)) def Blank(self,v): pass if __name__=="__main__": txt="""(\'abc (i j) (cond (x f1) (y f2) (z f3)))""" print txt p=Parser() p.parse(txt) print p._root """ result [[quote, 'abc', ['i', 'j'], ['cond', ['x', 'f1'], ['y', 'f2'], ['z', 'f3']]]] """
TODO
・特殊形式の解析のあたりが、まだいい加減。
・まだコードを実行する部分を書いてません
・ドットペア
続きは また今度