2007-08-01から1ヶ月間の記事一覧
「単語」をパースするパーサwordを考えてみます.ここで「単語」というのは一つ以上の「大文字・小文字のアルファベット」から構成されます. word:: Parser String word = do { c <- letter ; do { cs <- word; return (c:cs) ;} <|> return [c]; } do記法…
前に,ライブラリのソースコードの所在が分からないと書きました.たしかにGHCをインストールすると見当たらないのですが,GHCそのもののソースコードには入ってるのではなかろうかと思い至り(遅い(^^;;),GHC6.6.1のソースコードを入手,解凍してみました…
ただパーサを書いて何をパースしたか出力するだけでは意味がないので,意味のあるものを返そうというお話.前に作ったparens parens::Parser () parens = do char '(' >> parens >> char ')' parens <|> return () を書き直して,括弧が何重になってるかを数…
Parsecの選択 は「predictive」だとのこと.predictive,予言的.最初のパーサが入力を一切消費しないときのみ,次のパーサに処理が進むということらしいです. testOr::Parser String testOr = string "(a)" <|> string "(b)" というのを作ってみると *Main…
パーサをつなげてみようというお話.Parserはモナドだからdo記法でつなげることができます. openClose:: Parser Char openClose = do char '(' char ')' これで () だけをパースするパーサになるわけですか. *Main> parseTest openClose "()" ')' *Main> p…
teTeXがobsoluteになって久しく,texliveが次期標準になりつつありますが,ついに土村さんがptetexの後継としてptexliveを公開されました.試すのは週末になりそうです.それにしても暑くてばてばてです。。。
``Parsec, a fast combinator parser''をきちんと読んでみます.関係ないですけど,このドキュメント,誰がどうみてもLaTeX2e組で,PDFはdvipdfmで生成されてますね.閑話休題. 入力したソースは全部p.hsに保存することにして,ghciで実行します. ___ ___ …
Haskell本,それも日本人による日本語の本の三冊目以降が出ませんね.Haskellの「尖がった」ところが前面にでるような本が出てくれると勉強になるのですが.とりあえず現在頑張ってParsecのドキュメント読み中. ParsecでRPNからASTを作る なんてくらいのこ…
TeXのマクロの基本は\defなのですが,TeXのマクロは「単なる文字列の置き換えに過ぎない」という根本的な大原則があります.この原則を踏まえないでTeXのマクロを作ろうとすると絶対にいつかしっぺ返しをくらいます.例えば \def\temp{太郎} \def\marcoA#1{\…
TeXでマクロを定義するには\defを使います.しかし,この\defはスコープ(TeXではグループと呼ばれる)に影響されるので,同じスコープ内でのみ有効です.これを問答無用でグローバルにするための修飾子が\globalです.TeXのマクロは「動的スコープ」を持つ…
「ふつける」でソースは省略されているexpandPatternを,ちょっと前に練習がてら自前で実装したんですが。。。今見るとまるで分からない(-_-;;。だめだめ。parsecは忘れてるわ,そもそも自分が作った中間処理の関数が何をしてるのかが不明.コメントは冗長す…
リストの連結で,同じリストを連結させようとすると循環することに気がつきました.ということで,複製処理を追加です.さらに第一引数のリストを破壊してしまうことにも気がついたので修正です. sub Lconcat{ my $a=shift; my $b=shift; $b=Lduplicate($a)…
とにかく暑い・・セミは夜中まで元気.ふさふさおけけで散歩してるワンコも暑そうです.そんな中カレーを作ってたらますます暑くなった(苦笑).
sub Llength{#長さ my $l=shift; my $len=0; return 0 unless Lhead($l); return Llength(Ltail($l))+1; } sub Lduplicate{#複製 my $l=shift; return [Lhead($l),undef] unless Ltail($l); return [Lhead($l),Lduplicate(Ltail($l))]; } sub Llast{#最後の…
TeXにおいて分かりにくいものにマークの概念があります.マークの詳細には触れませんが,柱などに「何章」とか「何節」という本文の場所を示すものを出力するための機構だというくらいの理解でとりあえずは問題ないです.もっとも,以下の内容はマークという…