Skip to content

MueLangDeveloper/UCCScript-UnderDevelopment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

UCCScript-UnderDevelopment

 予期しない結果を返すバグがありますが、現在調査中です。

使い方

 ダウンロードはせず、UCCScript.csというファイルの内容を別ファイルにコピーするだけです。

基本文法

First (GrammarName) End ・・・ 実行するとき、最初にGrammarNameを呼び出す

$(GrammarName) In (Pattern) Is (Result) End ・・・ Patternに文法のパターン、Resultに結果を返す処理を書く

Patternの書き方

<( pat )> ・・・ patResultで参照可能にする(以後、普通参照と呼ぶ)

<{ pat }> ・・・ patResultで配列で参照可能にする(以後、配列参照と呼ぶ)

< GrammarName > ・・・ GrammarNameを呼び出す

<o "chars"> ・・・ パースする文字列がcharsのうちのどれかで始まっていなければ、強制的にResultへ移る

<x "chars"> ・・・ パースする文字列がcharsのうちのどれかで始まっていれば、強制的にResultへ移る

<s "chars"> ・・・ パースする文字列がcharsのうちのどれかで始まることがなくなるまでの文字列とマッチ

<ns "chars"> ・・・ パースする文字列がcharsのうちのどれかで始まっていることがなくなるまでの文字列とマッチ

<"char" ・・・ パースする文字列を先頭からcharでトリミングする

( pat1 | pat2 ) ・・・ pat1pat2にマッチ

{ pat } ・・・ patに0回以上マッチ

[ pat ] ・・・ patに0または1回マッチ

"string" ・・・ stringにマッチ

Number ・・・ 10進数字にマッチ

Char ・・・ 任意の文字にマッチ

String ・・・ "'、空白、10進数字以外にマッチ

Resultの書き方

 演算はスタックで行う

@0[index] ・・・ 参照可能にしたもののうち、index番目の文字列をスタックにプッシュする(普通参照用)

@1[index1 index2] ・・・ 参照可能にしたもののうち、index1番目のindex2番目の文字列をスタックにプッシュする(配列参照用)

$0[index] ・・・ 参照可能にしたもののうち、index番目の文字列の長さをスタックにプッシュする(普通参照用)

$0+[index] ・・・ 参照可能にしたもののうち、index番目の配列の長さをスタックにプッシュする(配列参照用)

$1[index1 index2] ・・・ 参照可能にしたもののうち、index1番目のindex2番目の文字列の長さをプッシュする(配列参照用)

?[index] ・・・ 参照可能にしたもののうち、index番目が存在したらTrue、しなかったらFalseをスタックにプッシュする

"string" ・・・ スタックにstringをプッシュする

l ・・・ スタックからポップし、その長さをスタックにプッシュする

# ・・・ スタックからポップし、その型をスタックにプッシュする(値は@num、文字列は@str、真偽値は@boolをプッシュ)

Num ・・・ スタックに@numをプッシュ

Str ・・・ スタックに@strをプッシュ

Bool ・・・ スタックに@boolをプッシュ

True ・・・ スタックにTrueをプッシュ

False ・・・ スタックにFalseをプッシュ

10進数字 ・・・ スタックにその10進数字をプッシュ

+ ・・・ 加算

- ・・・ 減算

* ・・・ 乗算

/ ・・・ 除算

% ・・・ 剰余算

^ ・・・ べき乗

= ・・・ 等価演算子

! ・・・ 真偽値の反転

< ・・・ 小なり

> ・・・ 大なり

& ・・・ 論理積

| ・・・ 論理和

~ ・・・ 型変換

: ・・・ スタックの最後をプッシュ(Befungeの:と同じ)

(制御構文) ・・・ 見たまんま

制御処理

 Resultの中では条件分岐や繰り返しなどが使えます。

If文

書き方:If[Condition1][Result1]ElseIf[Condition2][Result2]ElseIf[Condition3][Result3] ... Else[Result4]ElseIfはなくてもよいです。)

For文

書き方:For[First Last Increase][Result]

RustやF#のforと同じかんじです(増加量を設定できるところは違うかも)。

ForB文

書き方:ForB[First Increase][Condition][Result]

CとかDとかのforと同じかんじです(Conditionが外にあるのは実装の都合なので、許してください)。

While文

書き方:While[Condition][Result]

ほかのプログラミング言語と同じように書けます。

Load文

書き方:Load VarName[Value]

変数宣言や変数へ値を代入できます。値型だけです。変数の値を取得するときは、\VarNameと書きます。

 ちなみに、構文の途中で演算を行うことができます。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages