Submit Search
Upload
Smalltalkで四則演算パーサ
•
1 like
•
3,457 views
M
Masashi Umezawa
Follow
CROSS 2014 「言語CROSS」での四則演算パーサ作成課題の解答です
Read less
Read more
Technology
Education
Report
Share
Report
Share
1 of 11
Download now
Download to read offline
Recommended
150420 flash005 forループと関数
150420 flash005 forループと関数
elephancube
5分でわかる? 関数型 PHP の潮流
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
Cubby 2006-08-23
Cubby 2006-08-23
Agata Toshikata
20081120 lt11th ace
20081120 lt11th ace
Masanori Hayashi
Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)
risa buto
言語処理系入門3
言語処理系入門3
Kenta Hattori
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
Recommended
150420 flash005 forループと関数
150420 flash005 forループと関数
elephancube
5分でわかる? 関数型 PHP の潮流
5分でわかる? 関数型 PHP の潮流
Yuya Takeyama
Cubby 2006-08-23
Cubby 2006-08-23
Agata Toshikata
20081120 lt11th ace
20081120 lt11th ace
Masanori Hayashi
Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)
risa buto
言語処理系入門3
言語処理系入門3
Kenta Hattori
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
株式会社ランチェスター
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
VerStixの紹介
VerStixの紹介
Masashi Umezawa
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Masashi Umezawa
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Masashi Umezawa
Tarantalk
Tarantalk
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Why!? Smalltalk
Why!? Smalltalk
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
More Related Content
More from Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
VerStixの紹介
VerStixの紹介
Masashi Umezawa
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Masashi Umezawa
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Masashi Umezawa
Tarantalk
Tarantalk
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Why!? Smalltalk
Why!? Smalltalk
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
More from Masashi Umezawa
(20)
FileManで楽々ファイル操作
FileManで楽々ファイル操作
TruffleSqueakの紹介
TruffleSqueakの紹介
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
TaskItの紹介
TaskItの紹介
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Revealing ALLSTOCKER
Revealing ALLSTOCKER
TarandocでJSONを永続化
TarandocでJSONを永続化
Dockerizing pharo
Dockerizing pharo
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
VerStixの紹介
VerStixの紹介
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Tarantalk
Tarantalk
Smalltalkと型について
Smalltalkと型について
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Why!? Smalltalk
Why!? Smalltalk
Pillarの紹介
Pillarの紹介
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Recently uploaded
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Recently uploaded
(9)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Smalltalkで四則演算パーサ
1.
CROSS 2014 言語CROSS Smalltalkによる 四則演算パーサ別解解説 2014 SoftUmeYa,
LLC Masashi Umezawa
2.
四則演算パーサ課題 数式のパース、計算処理を実装する 間違った入力が行われた場合も、単なるエラーとせず、 なんらかの形で構文に謝りがある事をユーザーに伝 えるようにして下さい。 入力例:(1*2+(3*4) 出力例:数式が不正です 文字列のパース処理の比較が主なポイントなので、eval のような機能や、上記のような機能を持ったライブラリを そのまま使う事は禁止とします。
3.
どう解く? PetitParser PEGパーサコンビネータ http://scg.unibe.ch/research/helvetia/petitparser OMeta パーサ定義・パターンマッチDSL http://tinlizzie.org/ometa/ OMetaは以前紹介したのでPetitParserに 参考: 「OMetaの紹介」 • ftp://swikis.ddo.jp/SqueakDevJa/events/ScalaOff2008/OMetaIntro.pdf
4.
PetitParser オブジェクトにasParserと送るとパーサ ができる あとはそれらをメッセージ送信で組み合 わせる できあがったコードはほぼBNFと同じよ うに見える
5.
例: SQLiteのselect-core http://www.sqlite.org/syntaxdiagrams.html#select-core
6.
PetitParserでの表現 シンタックスグラフをメッセージ送信に selectCore ^ select ,
(distinct / all) optional , (resultColumn separatedBy: $, asParser trim) , (from , joinSource) optional , (where , expression ) optional , (groupBy , (orderingTerm separatedBy: $, asParser trim), ('HAVING' asParser caseInsensitive trim , expression) optional ) optional
7.
四則演算パーサの定義 クラスを導入しないパターン number :=
#digit asParser plus token trim 数値パーサ作成 ==> [ :token | token inputValue asNumber ]. terms := PPUnresolvedParser new. primary := PPUnresolvedParser new. それ以外のパーサ作成 parenthesis := PPUnresolvedParser new. (def: で後から定義) addition := PPUnresolvedParser new. multiplication := PPUnresolvedParser new. multiplication def: ((primary separatedBy: ($* asParser / $/ asParser) trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]). addition def: ((multiplication separatedBy: ($+ asParser / $- asParser) trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]). parenthesis def: ($( asParser trim , terms , $) asParser trim ==> [ :nodes | nodes second ]). 乗除、加減、括弧の順で primary def: number / parenthesis. パーサ定義 terms def: addition / multiplication. parser := terms end. 終端を定義して完成!
8.
ワークスペースで実行 parser parse: '1+2*(3+4)' "=>
15" parser parse: '(1+2*(3+4)' "=> $) expected at 10"
9.
四則演算パーサの定義(2) クラスを導入するパターン PPCompositeParserのサブクラスとして ArithmeticParser定義 PPCompositeParser
subclass: #ArithmeticParser instanceVariableNames: 'terms addition multiplication primary number parentheses' パース要素ごとにメソッドを定義 parentheses ^ $( asParser trim , terms , $) asParser trim ==> [ :nodes | nodes second ]
10.
クラス導入の利点 ツールの恩恵 対話的デバッグ、ビジュアライズ等が可能
11.
ワークスペースで実行(2) ArithmeticParser parse: '1+2*(3+4)' "=>
15" ArithmeticParser parse: '(1+2*(3+4)' "=> $) expected at 10"
Download now