npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

japan-syc

v1.2.1

Published

Japan-SYC — a Japanese-inspired programming language and interpreter

Readme

Japan-SYC

bahasa pemrograman dengan sintaks jepang, base JavaScript

deskripsi

japan-SYC adalah bahasa pemrograman interpreted yang menggunakan sintaks bahasa Jepang. Di-build dari nol pakai JavaScript murni (Node.js), tanpa dependency eksternal cocok buat belajar gimana cara kerja lexer, parser, dan interpreter

fitur

  • variabel dengan keyword 変数
  • output ke console dengan 見せる()
  • kondisi もし / 他 (if / else if / else)
  • loop 間 (while)
  • break 区切り dan continue 続ける
  • fungsi 関数 dengan 戻す (return)
  • boolean 真 / 偽
  • null 無 dan undefined 未定義
  • operator aritmatika: + - * / %
  • operator perbandingan: == != < > <= >=
  • operator logika: && || !
  • compound assignment: += -= *= /=
  • increment / decrement: ++ --
  • array literal [1, 2, 3] dan akses index arr[0]
  • object literal {キー: 値} dan akses property obj["キー"]
  • string concatenation dengan +
  • scope & closure
  • error handling dengan info line & column
  • identifier support huruf Jepang (Hiragana, Katakana, Kanji) + Latin
  • built-in functions dari JavaScript (Math, String, Array, Object, JSON, Date, Type, Global)

struktur Project

japan-syc/
├── src/
│   ├── lexer.js
│   ├── parser.js
│   ├── interpreter.js
│   ├── errors.js
│   └── builtins/
│       ├── index.js
│       ├── math.js
│       ├── string.js
│       ├── array.js
│       ├── object.js
│       ├── number.js
│       ├── json.js
│       ├── date.js
│       ├── console.js
│       ├── type.js
│       └── global.js
├── bin/
│   └── アリヤ・ラン.js
├── examples/
│   ├── こんにちは.jp
│   ├── ループ.jp
│   ├── 条件.jp
│   ├── 関数.jp
│   └── v2/
│       ├── math.jp
│       ├── string.jp
│       ├── array.jp
│       ├── object.jp
│       ├── json.jp
│       ├── date.jp
│       └── type.jp
├── tests/
│   ├── lexer.test.js
│   ├── parser.test.js
│   ├── interpreter.test.js
│   └── builtins.test.js
├── package.json
└── README.md

requirement

  • node.js v18 atau lebih baru (karena pakai node:test untuk testing)

instalasi

install Global

supaya command アリヤ・ラン bisa dipanggil dari mana aja:

npm install -g japan-syc

atau install dari github:

git clone japan-syc

tanpa install apapun langsung jalan pakai node.js:

node bin/アリヤ・ラン.js <file>.jp

cara Run

format:

アリヤ・ラン <file>.jp

contoh:

アリヤ・ラン examples/こんにちは.jp
アリヤ・ラン examples/v2/math.jp

output:

こんにちは、世界!
アリヤ・ラン へようこそ
私の名前は アリヤ です
年齢: 20

sintaks

variabel

deklarasi variabel pakai keyword 変数. Reassignment pakai 変数 juga (tanpa keyword baru):

変数 名前 = "アリヤ";
変数 年齢 = 20;
変数 名前 = "Budi";

output

pakai 見せる():

見せる("こんにちは");
見せる(42);
見せる(名前);
見せる("Halo, " + 名前);

kondisi

if / else if / else:

もし (点数 >= 90) {
  見せる("A");
} 他 もし (点数 >= 80) {
  見せる("B");
} 他 {
  見せる("C");
}

loop

while loop pakai 間:

変数 i = 0;
間 (i < 10) {
  見せる(i);
  変数 i = i + 1;
}

break dan continue:

変数 i = 0;
間 (i < 10) {
  変数 i = i + 1;
  もし (i == 3) {
    続ける;
  }
  もし (i == 7) {
    区切り;
  }
  見せる(i);
}

fungsi

Deklarasi pakai 関数, return pakai 戻す:

関数 足し算(a, b) {
  戻す a + b;
}

見せる(足し算(2, 3));

fungsi rekursif:

関数 階乗(n) {
  もし (n <= 1) {
    戻す 1;
  }
  戻す n * 階乗(n - 1);
}

見せる(階乗(5));

boolean

nilai boolean pakai 真 (true) dan 偽 (false):

変数 有効 = 真;
もし (有効) {
  見せる("OK");
}

null dan undefined

変数 空 = 無;
変数 未 = 未定義;

array

変数 数値 = [1, 2, 3, 4, 5];
見せる(数値[0]);
見せる(数値[2]);

object

変数 人 = {
  名前: "アリヤ",
  年齢: 20
};
見せる(人["名前"]);
見せる(人["年齢"]);

compound assignment

変数 x = 5;
x += 3;
x -= 1;
x *= 2;
x /= 2;
x++;
x--;

operator logika

見せる(真 && 偽);
見せる(真 || 偽);
見せる(!偽);

keyword reference

| Keyword | Fungsi | |---------|--------| | 変数 | deklarasi / assignment variabel | | 見せる | output ke console | | もし | if | | 他 | else / else if | | 間 | while loop | | 区切り | break | | 続ける | continue | | 関数 | deklarasi fungsi | | 戻す | return dari fungsi | | 真 | boolean true | | 偽 | boolean false | | 無 | null | | 未定義 | undefined |

operator reference

| Operator | Keterangan | |----------|------------| | + | penjumlahan / string concat | | - | pengurangan / unary minus | | * | perkalian | | / | pembagian | | % | modulo | | == | sama dengan | | != | tidak sama dengan | | < | kurang dari | | > | lebih dari | | <= | kurang dari atau sama dengan | | >= | lebih dari atau sama dengan | | && | logika AND | | \|\| | logika OR | | ! | logika NOT | | += | tambah dan assign | | -= | kurang dan assign | | *= | kali dan assign | | /= | bagi dan assign | | ++ | increment | | -- | decrement |

built-in functions

数学 (Math)

| Fungsi | Keterangan | |--------|------------| | 円周率 | Math.PI | | 自然対数 | Math.E | | 絶対値(n) | nilai absolut | | 切り上げ(n) | pembulatan ke atas | | 切り捨て(n) | pembulatan ke bawah | | 四捨五入(n) | pembulatan terdekat | | 平方根(n) | akar kuadrat | | べき乗(a, b) | pangkat | | 最大(...) | nilai maksimum | | 最小(...) | nilai minimum | | 乱数() | angka random 0-1 | | 整数乱数(min, max) | integer random | | 正弦(n) / 余弦(n) / 正接(n) | trigonometri | | 対数(n) / 対数10(n) | logaritma | | 符号(n) | tanda bilangan |

文字列 (String)

| Fungsi | Keterangan | |--------|------------| | 長さ(s) | panjang string | | 大文字(s) / 小文字(s) | upper / lower | | 分割(s, sep) | split | | 結合(arr, sep) | join | | 置換(s, from, to) | replace | | 検索(s, sub) | indexOf | | 含む(s, sub) | includes | | 開始(s, sub) / 終了(s, sub) | startsWith / endsWith | | 繰り返す(s, n) | repeat | | 切り出し(s, a, b) | slice | | トリム(s) | trim | | 文字取得(s, i) | charAt | | 一致(s, pattern) | regex test |

配列 (Array)

| Fungsi | Keterangan | |--------|------------| | 配列長(arr) | panjang array | | 配列追加(arr, x) | push | | 配列削除(arr) | pop | | 配列結合(a, b) | concat | | 配列合計(arr) | jumlah semua elemen | | 配列最大(arr) / 配列最小(arr) | max / min | | 配列逆(arr) | reverse | | 配列並替(arr) | sort | | 配列切出(arr, a, b) | slice | | 配列地図(arr, fn) | map | | 配列絞込(arr, fn) | filter | | 配列集約(arr, fn, init) | reduce | | 配列各(arr, fn) | forEach | | 配列含(arr, x) | includes | | 配列検索(arr, x) | indexOf | | 配列探索(arr, fn) | find | | 配列平坦(arr) | flat | | 配列全真(arr, fn) | every | | 配列何れ真(arr, fn) | some | | 配列連結(arr, sep) | join |

物体 (Object)

| Fungsi | Keterangan | |--------|------------| | 物体鍵(obj) | keys | | 物体値(obj) | values | | 物体項目(obj) | entries | | 物体結合(...objs) | merge | | 物体有(obj, key) | hasOwnProperty | | 物体長(obj) | jumlah key | | 物体削除(obj, key) | delete | | 物体凍結(obj) | freeze | | 物体作成(obj) | copy |

JSON

| Fungsi | Keterangan | |--------|------------| | JSON文字列化(obj) | stringify | | JSON整形(obj) | pretty print | | JSON解析(str) | parse |

日付 (Date)

| Fungsi | Keterangan | |--------|------------| | 現在時刻() | Date.now() | | 年(d) / 月(d) / 日(d) | tahun / bulan / tanggal | | 時(d) / 分(d) / 秒(d) | jam / menit / detik | | 曜日(d) | hari | | ISO形式(d) | ISO string | | 日付文字列(d) | date string | | 時刻文字列(d) | time string | | 地域形式(d) | locale string |

型 (Type)

| Fungsi | Keterangan | |--------|------------| | 型(x) | typeof | | 数値か(x) | is number | | 文字列か(x) | is string | | 真偽か(x) | is boolean | | 配列か(x) | is array | | 物体か(x) | is object | | 関数か(x) | is function | | 無か(x) / 未定義か(x) | is null / undefined | | 空か(x) | is empty | | 変換数値(x) / 変換文字列(x) / 変換真偽(x) | cast |

全体 (Global)

| Fungsi | Keterangan | |--------|------------| | 整数変換(s) | parseInt | | 小数変換(s) | parseFloat | | 数値判定(x) | isNaN | | 有限判定(x) | isFinite | | 無限 | Infinity | | 非数 | NaN | | 符号化(s) / 復号化(s) | URI encode / decode |

contoh Program

hello World

見せる("こんにちは、世界!");

fizzBuzz sederhana

変数 i = 1;
間 (i <= 15) {
  もし (i == 15) {
    見せる("FizzBuzz");
  } 他 もし (i == 5) {
    見せる("Buzz");
  } 他 もし (i == 3) {
    見せる("Fizz");
  } 他 {
    見せる(i);
  }
  変数 i = i + 1;
}

kalkulator Sederhana

関数 足し算(a, b) {
  戻す a + b;
}

関数 引き算(a, b) {
  戻す a - b;
}

関数 掛け算(a, b) {
  戻す a * b;
}

関数 割り算(a, b) {
  もし (b == 0) {
    戻す "エラー: ゼロで割れません";
  }
  戻す a / b;
}

見せる("10 + 5 = " + 足し算(10, 5));
見せる("10 - 5 = " + 引き算(10, 5));
見せる("10 * 5 = " + 掛け算(10, 5));
見せる("10 / 5 = " + 割り算(10, 5));

contoh Array

変数 数値 = [1, 2, 3, 4, 5];
見せる("合計: " + 配列合計(数値));
見せる("最大: " + 配列最大(数値));

変数 倍 = 配列地図(数値, (n) => n * 2);
見せる("倍: " + 倍);

変数 偶数 = 配列絞込(数値, (n) => n % 2 == 0);
見せる("偶数: " + 偶数);

contoh Object

変数 人 = {
  名前: "アリヤ",
  年齢: 20,
  都市: "東京"
};
見せる("名前: " + 人["名前"]);
見せる("キー: " + 物体鍵(人));

contoh JSON

変数 データ = {
  名前: "アリヤ",
  年齢: 20
};
変数 文字 = JSON文字列化(データ);
見せる(文字);

変数 解析 = JSON解析(文字);
見せる(解析["名前"]);

error Handling

Japan-SYC punya 3 tipe error:

| Error | Kapan Muncul | |-------|--------------| | LexerError | karakter tidak dikenal, string tidak ditutup | | ParserError | sintaks salah, token tidak sesuai | | RuntimeError | variabel undefined, tipe data salah, bagi nol |

Setiap error menampilkan pesan + line + column.

contoh error:

ParserError (1行目, 10列目): ; が必要です

testing

jalanin semua test:

npm test

test mencakup:

  • lexer.test.js — tokenize number, string, keyword, identifier, operator
  • parser.test.js — parse var, show, if, while, function, precedence
  • interpreter.test.js — eksekusi var, arithmetic, if, while, function, rekursif
  • builtins.test.js — test semua built-in function

arsitektur

alur eksekusi:

file.jp
   ↓
[lexer.js]        → pecah source jadi tokens
   ↓
[parser.js]       → ubah tokens jadi AST
   ↓
[interpreter.js]  → eksekusi AST
   ↓
output (console)

penjelasan tiap komponen:

| File | Tanggung Jawab | |------|----------------| | src/lexer.js | baca source code, hasilkan token | | src/parser.js | baca token, bangun AST (Abstract Syntax Tree) | | src/interpreter.js | traverse AST, eksekusi statement & evaluasi expression | | src/errors.js | custom error class dengan line & column info | | src/builtins/*.js | kumpulan built-in function dari JavaScript | | bin/アリヤ・ラン.js | cli entry point, baca file .jp, jalankan pipeline |

ekstensi File

Semua file Japan-SYC harus pakai ekstensi .jp.

Lisensi

MIT - irfanModz