HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1025
HSP 初心者HSPでプログラミング言語自作10解決


HSP 初心者

リンク

2019/10/25(Fri) 16:59:14|NO.88687

無理かもしれませんが、HSPでプログラミング言語を作ることはできますか?



この記事に返信する


HSP 初心者

リンク

2019/10/25(Fri) 17:04:15|NO.88688


title "SS言語" bgscr 0,1920,1080,0,0,0 color 60,60,60 boxf color 30,30,30 boxf 0,0,1920,80 color 255,255,255 font "msgothic",80 mes "SS言語" buffer 1 screen 1,640,480 color 255,0,0 boxf color 255,255,255 font "Marlett",80 mes "r" buffer 2 screen 2,640,480 color 255,125,0 : boxf font "msgothic",80 color 255,255,255 mes "実行" gsel 0 objmode 2,0 objimage 1,0,0,0,0,0,0 objsize 80,80 pos 1920-80,0 button "",*ends objimage 2 objsize 160,80 pos 800,0 button "",*zikkou main = "" pos 0,80 mesbox main,1920,1000 stop *ends end stop *zikkou if main = "newscreen" { screen 3 onexit *endk } if main = "" : dialog "テキストを書いてください" stop *endk gsel 3,-2 onexit *ends

↑newscreenのみ打つとウインドウが出てくるソースコード↑


newscreen
print ("Hello world")
で実行すると

Hello world と表示される的なプログラムを作りたいです



HSP 初心者

リンク

2019/10/25(Fri) 17:06:07|NO.88689

汚いスクリプトですみません。😔



とあるプログラマ

リンク

2019/10/26(Sat) 12:52:46|NO.88699

一応超簡単な実装です。なのでこれだとちょっとした文法ミスでエラーになったりするので、改善が必要になってきますが。

スクリプトの一番最初に

#include "mod_regexp.as"
を追加してください。そして*zikkou以下を次に置き換えてください。

*zikkou // 空は返す // (stopは超違和感あるんですが、gosubじゃないので仕方なし) if main = "" : dialog "テキストを書いてください" : stop notesel main repeat notemax notesel main noteget main_line, cnt // 正規表現を使用して文字列を取り出す。サブマッチを複数使うのでmatches命令 // (newscreenがnewscreen()ではないのが気になるけど…) matches syntax, main_line, "^(newscreen|print)(?: \\(\"(.+)\"\\)){0,1}$" // もし文法が正しければこの時点でsyntaxに取り出された文字列が入っている // syntax(0,1)にnewscreenかprintfが入る。syntax(0,2)に文字列が入る5 if (length2(syntax) == 3) { if (syntax(0,1) == "newscreen" && syntax(0,2) == "") { // newscreen は引数を持たないのでsyntax(0,2)が""以外は無視する // あとnewscreenを複数回記述した時用に、ginfo_newidとする screen ginfo_newid onexit *endk }else:if (syntax(0,1) == "print" && syntax(0,2) != "") { // print命令は""だと無視するようにしている。 // (例のところのprintと("〜")の間にスペースがあったので、スペースあけないとエラーになります一応) // ""の場合に""を記述するならmatches側の検索の仕方を変える必要あり // (.+を.*にした場合、newscreen("")もヒットしてしまう) mes syntax(0,2) }else { dialog "エラー" break } }else { dialog "エラー" break } loop stop *endk if (ginfo_act == 0) { end }else { gsel ginfo_act,-2 }



HSP 初心者

リンク

2019/10/26(Sat) 17:53:51|NO.88702

本当にありがとうございます!!
HSPで新しい言語を開発してみます!!



Y_repeat

リンク

2019/10/26(Sat) 21:12:27|NO.88705

こんばんわ。自分もHSP製プログラミング言語に挑戦したことあるんですけど

あんまりHSPには向いてない気します

割と大きめの構想しがちな割に

なかなか実装出来ない事とか

大きめのプログラム作成に向いてないとことか

「tiny BASIC」とかでググって改造とかしながら理解してく方が近道だと思ってます



Y_repeat

リンク

2019/10/27(Sun) 06:30:50|NO.88710

そう言えばfさんが投稿してましたね

http://hsp.tv/play/pforum.php?mode=pastwch&num=42969

自分はコンテストに二つ目の作品を投稿したとこです



HSP 初心者

リンク

2019/10/27(Sun) 11:05:40|NO.88712

HSPで高度なプログラミング言語を作るのは難しいということですか?



Y_repeat

リンク

2019/10/27(Sun) 23:28:44|NO.88719

こんばんわ。以外と難しい問いですな

逆に高度なゲームを作成することは可能ですか?
とすると、プロコンで高度なゲームは出品されてますよね
では、あなたは高度なゲームを作成することは可能ですか?
僕は手抜きゲームばかり作ってて、高度なゲームを作成することは
不可能だと思います

要するにあなたの手腕次第ってことっすな

HSPは必ずしもプログラミング言語の作成に向いてるとは思いませんが
詳しくないですけど 初期のBASICってアセンブラとか機械語で
作成されてるっぽいっすけど
アセンブラとか機械語よりは楽に作成出来ると思います

自分がHSPで形に出来るのは2000行くらいで、
調子こいて5000行近くなると収拾つかなくなります

HSPで大きいスクリプト管理出来る人なら
10000行クラスの言語は作成出来るんじゃないっすかね?

詳しくないですけどHSPは
十万行くらいっぽいっすね

たまにググったかんじでは
プログラムの作成言語はCかJAVAっぽいっすね
visual C++も。HSPはvisual C++製っぽいっす
速度を要求しないならpythonもあり

どんな言語を使うかでも
どんなサンプルプログラムを参考するかでも
色々検討するのは必要でありますが

有名予備校の先生が「お前が合わせろ」って言ってて
100%しっくりくることなんてないんだから
自分がそれに合わせるって
大事なんだな。と最近思ってます



ベイン

リンク

2019/10/28(Mon) 21:51:42|NO.88736

正規表現(mod_regexp)による構文解析には限界があって、
例えば数式などはうまく扱えないので、
そのあたりで困ってきたら「再帰下降構文解析」
あるいは「演算子優先度順位法」について調べてみてください。

例えば以下のページはC言語でC言語のコンパイラを作るガイドですが、
「再帰下降構文解析」や「スタックマシン」の部分の解説は、
言語によらず参考になります。
[低レイヤを知りたい人のためのCコンパイラ作成入門]:
https://www.sigbus.info/compilerbook

また、以前にスクリプト言語処理系を HSP で少し書いたので貼っておきます。
最新版はやや複雑になってしまっていますが、
過去バージョンは何かしら参考になるかもしれません。

[ネギ言語]: https://github.com/vain0x/negi-lang



Y_repeat

リンク

2019/10/28(Mon) 23:37:28|NO.88741

>ベインさん
3000行〜4000行くらいの作品なんですね
なかなかの力作です。すごいと思います
自分それくらいの行数のプログラムを完成させたことないっす

http://www.hpcs.cs.tsukuba.ac.jp/~msato/lecture-note/comp-lecture/
自分はここで勉強中してます



ONION software Copyright 1997-2021(c) All rights reserved.