検索
ホームページウェブフロントエンドCSSチュートリアル小さなプログラミング言語を作成しましょう

小さなプログラミング言語を作成しましょう

すでに1つ以上のプログラミング言語に精通している可能性があります。しかし、独自のプログラミング言語を作成する方法について考えたことがありますか?つまり:

プログラミング言語は、文字列をさまざまなマシンコード出力に変換する一連のルールです。

要するに、プログラミング言語は、事前定義されたルールのセットにすぎません。それを便利にするには、コンパイラ通訳など、これらのルールを理解できるものが必要です。したがって、単にいくつかのルールを定義することができ、それを機能させるために、既存のプログラミング言語を使用してこれらのルールを理解できるプログラムを作成できます。

コンパイラ

コンパイラは、コードをプロセッサが実行できるマシンコード(Cコンパイラなど)に変換します。

通訳者

通訳者は、プログラムを1行ごとに通過し、各コマンドを実行します。

試してみませんか?コンソールにMagenta出力を出力する非常にシンプルなプログラミング言語を作成しましょう。私たちはそれをマゼンタと呼びます。

プログラミング言語を設定します

node.jsを使用しますが、あらゆる言語で学ぶことができ、概念は同じままです。最初にindex.jsファイルを作成してセットアップします。

クラスマゼンタ{
  コンストラクター(コード){
    this.codes = codes;
  }
  走る() {
    console.log(this.codes);
  }
}

//現在、コードを「codes」と呼ばれる文字列変数に保存します//後で、ファイルconst codes = `print" hello world "からコードを読み取ります
「Hello Again」を印刷してください `;
const magenta = new Magenta(コード);
Magenta.run();

私たちがここでやっていることは、マゼンタと呼ばれるクラスを宣言することです。このクラスは、コード変数を介して提供するテキストを使用して、コンソールにテキストを記録する責任のあるオブジェクトを定義および初期化します。また、現在、ファイル内のいくつかの「ハロー」メッセージを使用して、コード変数を直接定義しています。

さて、いわゆる語彙分析装置を作成する必要があります。

語彙アナライザーとは何ですか?

わかりました、最初に英語について話しましょう。次のフレーズをご覧ください。

大丈夫ですか?

ここで、「Hello」は挨拶です」、「補足的な口調」、「あなた」は個人的な代名詞です。最後に疑問符( "?")があります。任意の文やフレーズをこのような多くの文法コンポーネントに分けることができます。これらの部分を区別する別の方法は、それらを小さなマークに分割することです。テキストをタグに分割するプログラムは、語彙分析装置です。

私たちの言語は非常に少ないため、それぞれが値を持つ2種類のタグしかありません。

  1. キーワード

正規表現を使用してコード文字列からタグを抽出できますが、パフォーマンスは非常に遅くなります。より良いアプローチは、コード文字列の各文字をループしてタグを取得することです。それでは、マゼンタのクラスでトークン化方法を作成しましょう。これは語彙分析装置になります。

完全なコードjavascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { const length = this.codes.length; // pos 用于跟踪当前位置/索引let pos = 0; let tokens = []; const BUILT_IN_KEYWORDS = ["print"]; // 变量/关键字允许的字符const varChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; while (pos <code>); } } return tokens; } parse(tokens) { const len = tokens.length; let pos = 0; while (pos parse(tokens);

const codes = print "hello world" print "hello again" ;

###ルールと構文の定義コード注文がルールまたは構文と一致するかどうかを確認します。しかし、最初に、これらのルールと構文が何であるかを定義する必要があります。私たちの言語は非常に小さいため、単純な構文、つまり印刷キーワードに続いて文字列が続きます。

キーワード:文字列を印刷します

<code>因此,让我们创建一个解析方法,该方法循环遍历我们的标记,并查看我们是否形成了有效的语法。如果是这样,它将采取必要的措施。 ```javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { /* tokenizer 的先前代码*/ } parse(tokens) { const len = tokens.length; let pos = 0; while (pos </code>

見て!私たちはすでに働く言語を持っています!

OKですが、コードを文字列変数に入れるのはそれほど楽しいことではありません。それでは、 Magentaコードをcode.mというファイルに入れましょう。これにより、マゼンタコードをコンパイラロジックから分離できます。 .mをファイル拡張子として使用して、ファイルに言語にコードが含まれていることを示します。

このファイルからコードを読みましょう。

 //ファイルシステムモジュールconst fs = require( 'fs');
//パスモジュールをインポートして、パス接続を容易にしますconst path = require( 'path');
クラスマゼンタ{
  コンストラクター(コード){
    this.codes = codes;
  }
  tokenize(){
    /*トークナイザーの前のコード*/
  }
  parse(tokens){
    /*以前の解析方法*/
  }
  走る() {
    /*以前の実行方法*/
  }
}

// code.mファイルを読む//一部のテキストエディターは、\ nの代わりに\ r \ nを新しいラインとして使用するので、\ rを削除します
const codes = fs
  .readfilesync(path.join(__ dirname、 'code.m')、 'utf8')
  .toString()
  .replace(/\ r/g、 "");
const magenta = new Magenta(コード);
Magenta.run();

プログラミング言語の作成を開始します!

このようにして、私たちはゼロからミニプログラミング言語を正常に作成しました。プログラミング言語は、特定のものを完了するのと同じくらい簡単です。もちろん、ここのマゼンタのような言語が人気のあるフレームワークの一部になるのに役立つ可能性は低いですが、今ではプログラミング言語を作成するために必要なことを知っています。

空は限界です。深く掘り下げたい場合は、私が作成したビデオをフォローしてみてください。これにより、より高度な例が紹介されています。このビデオでは、言語に変数を追加する方法も示します。

以上が小さなプログラミング言語を作成しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CSS Flexbox vsグリッド:包括的なレビューCSS Flexbox vsグリッド:包括的なレビューMay 12, 2025 am 12:01 AM

FlexBoxまたはグリッドの選択は、レイアウト要件によって異なります。1)FlexBoxは、ナビゲーションバーなどの1次元レイアウトに適しています。 2)グリッドは、雑誌のレイアウトなどの2次元レイアウトに適しています。この2つは、レイアウト効果を改善するためにプロジェクトで使用できます。

CSSファイルを含める方法:メソッドとベストプラクティスCSSファイルを含める方法:メソッドとベストプラクティスMay 11, 2025 am 12:02 AM

CSSファイルを含める最良の方法は、タグを使用してHTMLパーツに外部CSSファイルを導入することです。 1.タグを使用して、外部CSSファイルを導入します。 2。小さな調整のために、インラインCSSを使用できますが、注意して使用する必要があります。 3.大規模プロジェクトでは、@Importを介して他のCSSファイルをインポートするために、SASS以下などのCSSプリプロセッサを使用できます。 4。パフォーマンスのために、CSSファイルをマージし、CDNを使用し、CSSNANOなどのツールを使用して圧縮する必要があります。

FlexBox対グリッド:両方を学ぶべきですか?FlexBox対グリッド:両方を学ぶべきですか?May 10, 2025 am 12:01 AM

はい、Youはrelearnbothlexboxandgrid.1)FlexBoxisidealforone-Dimensional、FlexiblleayoutslikenavigationMenus.2)Gridexcelsintwo-digsignssuchasmagazinelayouts.3)Bothenhanceslaysutibulivedibulisunivedivition、floctonsulururを

軌道力学(またはCSSキーフレームアニメーションの最適化方法)軌道力学(またはCSSキーフレームアニメーションの最適化方法)May 09, 2025 am 09:57 AM

独自のコードをリファクタリングするのはどのように見えますか?ジョン・レアは、彼が書いた古いCSSアニメーションを選び、それを最適化するという思考プロセスを歩きます。

CSSアニメーション:それらを作成するのは難しいですか?CSSアニメーション:それらを作成するのは難しいですか?May 09, 2025 am 12:03 AM

cssanimationsArenotintinlentyhardbutrepracticeanderstanding ofcsspropertiesandtimingfunctions.1)

@KeyFrames CSS:最も使用されているトリック@KeyFrames CSS:最も使用されているトリックMay 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversitility andpowerincreatingsmoothcssanimations.keytricksinclude:1)defingsmoothtransitionsbetweenstates、2)AnimatingMultipleProperiessimally、3)3)bendorprefixesforbrows -compativity、4)組み合わせwithjavasfo

CSSカウンター:自動番号の包括的なガイドCSSカウンター:自動番号の包括的なガイドMay 07, 2025 pm 03:45 PM

csScounterSareSareusedTomageautomaticinginginwebdesigns.1)それらは、コンテンツ、リスト、および積極的なものを使用することができます

スクロール駆動型のアニメーションを使用したモダンなスクロールシャドウスクロール駆動型のアニメーションを使用したモダンなスクロールシャドウMay 07, 2025 am 10:34 AM

特にモバイルデバイスでは、スクロールシャドウを使用することは、Chrisが以前にカバーした微妙なUXです。 Geoffは、アニメーションタイムラインプロパティを使用する新しいアプローチをカバーしました。これがさらに別の方法です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター