A Tiny Programming Language
Java ANTLR
Latest commit 49cb53b Jan 23, 2017 @kmizu Remove return expression
Permalink
Failed to load latest commit information.
src Remove return expression Jan 23, 2017
test-input
.gitignore Add jar and shade plugin for generating fat jar Jan 4, 2017
.travis.yml Add .travis.yml Jan 23, 2017
HOW_TO_RUN.md add how to run in terminal Jan 21, 2017
README.md Add .travis.yml Jan 23, 2017
pom.xml Add exec plugin for executing via maven Jan 4, 2017

README.md

Nub: A Tiny Programming Language

Build Status

このレポジトリはプログラミング言語作成ハンズオン向けのレポジトリです。 Nubとは英語で小さな塊や隆起を意味する言葉です。 Nubの文法はANTLR4を使って書かれています。 NubのインタプリタはJavaを使って書かれています。

NubのコンパイルにはMaven 3が必要です。 MavenがANTLR4プラグインを提供するため、ANTLR4は必要ありません。

  • src/main/antl4/com/github/kmizu/nub/Nub.g: ANTLRによるNubの文法定義
  • src/main/java/...: Javaソースコード
  • pom.xml: Maven用コンフィグ

開発者向けドキュメント

How To Run

整数リテラル

1
5
10
100
1000
...

四則演算式

1 + 2
1 + 2 * 3
(1 + 2) * 3
(1 + 2) * 3 / 4

値宣言・代入・呼出

各プログラムの行の最後にはセミコロンが必要です。

let x = 1;
let y = 2;
print(x + y); //3
x = 2;
print(x + y); //4
// let x = 1; is not allowed since x is already defined

比較演算式

1 < 2
3 < 4
3 <= 3
6 > 5
7 > 5
7 >= 7
1 == 1
5 == 5
1 != 2
3 != 2

プリント

文法

print(expression);

初期は整数値の表示のみ対応しています。 将来的に整数値以外にも対応する予定です。

条件式

文法

if (condition) {
  expression
  ...
} (else {
  expression
  ...
})?

if(1 < 2) {
  print(1);
}else {
  print(2);
}

ループ式

文法

while(condition) {
  expression
  ...
}

let i = 0;
while(i < 10) {
  print(i);
  i = i + 1;
}

値宣言にはletを使います。代入演算sもサポートされています。

コメント

行コメントをサポートします。 例えば、

// abcdef
1 + 2; // 3

上記の//abcdefは無視されます。

関数宣言・呼出

def printRange(from, to) {
  let i = from;
  while(i <= to) {
    println(i);
    i += 1;
  }
}
printRange(1, 10); // from 1 to 10 are printed