自由帳

@_nibral の技術ブログ

2019-01-01から1年間の記事一覧

i3-9100Fで自宅PCを組んだ

メモリとSSDが安くなってたので勢いで。 構成 まず、いままで使っていたPCの構成がこちら。Netflixで映画を見たりETS2でヨーロッパを走り回る分には特に問題ないが、組んでから4年半が経過してるのでそろそろ入れ替え時。 パーツ 型番 CPU Intel Core i5-446…

オフィスにCisco Meraki MR33を導入してみた

NTTから貸し出されるホームゲートウェイ(RS-500KI)の無線LANがどうにも不安定なので、ちゃんとしたアクセスポイントを導入した話。 Cisco Merakiとは 数年前にCiscoが買収したプロダクトで、無線LANのアクセスポイントやスイッチ、ファイヤーウォールなどを…

AWS SAMでDefaultAuthorizerとCORSが共存できるようになった

半年ほど前に以下のような記事を書いたが、その後のアップデートでDefaultAuthorizerとCORSが問題なく共存できるようになった。 nibral.hateblo.jp 関係しそうなところ AWS::Serverless::ApiのAuthプロパティに「AddDefaultAuthorizerToCorsPreflight」が追…

AWS SAMでDefaultAuthorizerを設定するとCORSに失敗する

-------- 2019/10/17追記 -------- AWS SAMのアップデートでこの問題は解消した。 nibral.hateblo.jp -------- 追記ここまで -------- 問題 AWS SAMのAWS::Serverless::Apiでは、AuthプロパティのDefaultAuthorizerをセットすることですべてのエンドポイント…

Writing An Interpreter In Go その9(終)

その8はこちら この本に取り組み始めて1か月が経ってしまいそうだったので、日曜丸1日を使って残りを全部終わらせることにした。 4章では文字列型、配列、ハッシュの構文と、それに付随する組み込み関数をいくつか追加する。インタプリタの仕組みはすでに完…

Writing An Interpreter In Go その8

その7はこちら 3.10: 関数の定義と呼び出し 3.9: Implement function call · nibral/monkey_interpreter@f09f2fd · GitHub (コミットメッセージの章番号を間違えてた) 関数を定義する fn 構文と、定義した関数を呼び出す処理を実装する。本に従ってコード…

Writing An Interpreter In Go その7

その6はこちら 前回までの内容でREPLが電卓として使えるようになったので、if文とreturn文、それに変数の宣言と利用を追加して電卓からプログラミング言語にレベルアップさせる。 3.6: if文の評価 3.6: Evaluate if statements · nibral/monkey_interpreter@…

Writing An Interpreter In Go その6

その5はこちら Parserが構築した抽象構文木 (AST) を評価し、入力したソースコードの意味を取り出すEvaluatorの作成に入る。 3.4: オブジェクト表現を実装 3.4: Implement object representation · nibral/monkey_interpreter@ac2828d · GitHub Evaluatorで…

Writing An Interpreter In Go その5 (Parser完成)

その4はこちら 引き続き各種トークンの処理を追加し、Parserを完成させる。 この辺から一部のテストコードが省略されるようになってきて、実装してテストが通った後に著者のコードと比べて答え合わせをする作業が増えた。 2.8: boolean 2.8: Add boolean · n…

Writing An Interpreter In Go その4

その3はこちら Parserへ識別子と演算子をASTに追加する処理をつけていく。 演算子には「左から右へ」「掛け算は足し算より先に」という優先順位があるが、C言語のコンパイラにチャレンジしたときは生成規則からパーサを書こうとして左再帰で詰んだり、スタッ…

Writing An Interpreter In Go その3

その2はこちら Lexerが完成してソースコードをトークン列に分解できるようになったので、抽象構文木 (Abstract Syntax Tree, AST) を組み立てるParseの実装に入る。 バッカス・ナウア記法 (BNF) などで書かれた構文規則からParserを自動生成するParser Gener…

Writing An Interpreter In Go その2 (Lexer完成)

その1はこちら 1.4: '==' と '!=' の追加 1.4: Add '==' and '!=' · nibral/monkey_interpreter@0b77bb3 · GitHub lexer/lexer.go 演算子 == と != を追加した。2文字の演算子として処理させるのではなく、=/! の後に = が続くかどうか判定する処理を入れて …

Writing An Interpreter In Go その1

その0はこちら。 1.3: Lexer(字句解析器)の実装 1.3: Implement lexer · nibral/monkey_interpreter@66eb6e3 · GitHub lexer/lexer.go ソースコードを文字列として受け取って、一文字ずつ読み進めながらトークンの配列に変換する処理を作成。 1文字の識別…

Writing An Interpreter In Go その0

コンパイラの勉強がしたくなったので、Thorsten Ballの"Writing An Interpreter In Go"を読むことにした。オライリーから「Go言語でつくるインタプリタ」として日本語版の書籍も出ているが、著者のサイトから続編にあたる"Writing A Compiler In Go"とセット…