0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

現在開発中のUCCScript 開発段階でできること

Last updated at Posted at 2025-02-03

 最近、自作の構文解析用言語のParserScriptが使いづらくなってきた……。

 ということで、UCCScript(Universal Compiler Creation Script Language(であってほしい))の開発を始めました。

開発段階のUCCScript:UCCScript-UnderDevelopment

現状今できること

 GitHubにコードが何を表すかを詳しく解説します。
 
 現在、ほとんどの機能が実装され、制御機能をつけています。具体的に書くと、任意のアンカーへの移動(Pattern:'(アンカー)、m"p:index"m"r:index" Result:'(アンカー)、MoveP[index]MoveR[index])、BeMatch文(アンカーを使用して再マッチングを行わせる)、グローバル変数とGlobalLoad文を実装する予定です。

 
--追記
・現在、m"p:index"m"r:index"(Pattern内)とMoveP[index]MoveR[index](Result内)を実装し、ret(Pattern内)、Ret(Result内)を実装しており、問題がないか確認する予定です。
'は基本スルーされますが、スルーせずにjに飛ぶjを実装することにしました。

 
--追記の追記
・MoveRの動作テストを行った際、プログラムが一向に終わらないバグが発生し、同様にm"p:index"も終わらなくなり、原因不明のため、m"r:index"改めm(index)(またはM(index)()は見ずらいのでわかりやすくしています))、MoveP[index]改めMove[index]のみとします。
・全ての機能を実装しました。UCCScript
 

 使うことのできる制御機能はIf文、For文、ForB文、While文です(For文はRustやF#、ForB文はCやC#と機能は同じ)。また、変数のためのLoad文があります。

サンプル

以下は、abのみで構成された入力の内、a国語辞典b饗宴に置き換えるコード

First Sample End
$Sample In { <{ ( "a" | "b" ) }> }
        Is (For[0 $0+[0] 1 - 1][ (If[@1[0 `] "a" =][ "国語辞典" ] ElseIf[@1[0 `] "b" =][ "饗宴" ] Else[]) ]) End
First Sample End
$Sample In { <{ ( "a" | "b" ) }> }
        Is (ForB[0 1][` $0+[0] <][ (If[@1[0 `] "a" =][ "国語辞典" ] ElseIf[@1[0 `] "b" =][ "饗宴" ] Else[]) ]) End

後者は条件を繰り返す度、再計算するので前者の方が良い

 
 
以下は二つの正の整数の入力Number1Number2を受け取り、Number1を何倍すればNumber2で割り切れるかを出力する

入力

Number1
Number2

コード

First Sample End
$Sample In <( Number )> "\n" <( Number )>
        Is (Load Num1[@0[0] Num ~]) (Load Num2[@0[1] Num ~]) (Load Count[1])
           (While[\Num1 \Count * \Num2 % 0 = !][ (Load Count[\Count 1 +]) ]) \Count End

現在発生中のバグ

 現在、対応に追われているバグは以下の

First Test End
$Test In { <o "+-"> ( "+" | "-" ) <o "*/"> ( "*" | "/" ) }
      Is (If[?[0] ?[1] &][ (For[0 $0+[0] 1 - 1][ @1[0 `] ]) (For[0 $0+[1] 1 - 1][ @1[1 `] ]) ] Else[]) End

 というコードを書き、

+*-/

 という入力を与えると

+-*/

 という結果が返ってきてほしいのですが

+-+*/

という結果が返ってきます。

--追記
・このバグはUCCScriptの仕様によるもので、解決のしようがないものでした。

終わりに

 ほかにもバグがあると思います。実装予定のものはあくまで、高速化などを目的にしているため、開発途中の(予定のものを除けば、完成した)ものを公開しています。使うときは、必ずREADMEを読んでください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?