【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net (425レス)
1-

1
(1): 2016/12/24(土)12:22 ID:CVYSyiU+(1) AAS
FreeBasic
http://www.freebasic.net/

建てたいって人がいたので勝手に建てた
後はご自由にどうぞ
俺は知らん
過去スレ
2chスレ:tech
2: 2016/12/25(日)17:21 ID:R91XRShr(1) AAS
現在 Declere 文75KB,
””内外で処理が異なる例を見つけた。
「:」、
””外では、Visual Basic では、半角空白が1文字追加され、文の切れ目の意味を持つ。
””外では、Windows では、デバイスの末尾の文字でルートディレクトリーを示す。
前者に慌せて、一律空白を入れてしまうと、ファイルに全くアクセスできなくなるという状態に陥る。

サブルーチン内で値を変更している引数を一括して、ByRef 引数に書き換えるべく、
解釈ルーチンを作っているのだが、大文字と小文字を区別しないということが、漢字コード゛の存在下でかなり面倒くさい処理になってしまっている。
3: 2016/12/28(水)23:44 ID:bENiqIxW(1) AAS
http://makoto-watanabe.main.jp/freebasic/PgIfthen.html
にあるように
IF NOT (なんだら) Then
の代わりの
IF (なんたら) ELSE
文がFreeBasic では使えない。
V.B.でIF ELSE 文を使っていた人は要注意。
4: 2016/12/31(土)15:16 ID:HTFXcJGG(1) AAS
http://video.fc2.com/content/20161231knmREYEX
5
(1): 2017/01/12(木)18:51 ID:JOVmaPyb(1/2) AAS
現在 Declere 文81KB,まもなく900行となる。
Function文からの引き抜きルーチンがうまく動いているようで、Function 文に間違いがなければ、何とか動いてくれている。

問題は引数検査。
命令語の右側の値を定義する命令が今のところ見つかっていないので、
例 機械語の INC AL 等
「=」を見つけて、左側の変数が定義される、として処理したまでは良かった。
問題は関数
適当な関数(変数,,,,)
で、変数を定義する場合があることに気が付いた。

引数の入出力チェックは今のところで来ていない。
省1
6
(2): 2017/01/12(木)19:28 ID:JOVmaPyb(2/2) AAS
複数モジュール(ファイル) AAA.BAS, BBB.BAS, CCC.BAS があったとする。
お互いに、他のファイルの関数を参照していると、他の関数の参照関係(ByValかVtRefか)が決定されないと自分の参照関係がわからない。

ループや振り子現象にどう対応するか、
ループや振り子現象になるようなルーチンをどうやって発見するか、
が問題となる。これの見通しが立っていない。
発見できれば、別ファイルにして一つにまとめると、
同一ルーチン内のループや振り子現象になるので、処理が楽になる(一律ByRefとする)。

今現在は、大文字小文字を区別せずに整列して、昇順に処理しているけど
これを参照する他のファイル数の少ない順に処理してゆく
もし、参照関係を変更したら、遡って処理しなおすという方法で避けられるから。
省10
7: 2017/01/15(日)11:55 ID:Z3HvmWhY(1) AAS
hosyu
8
(2): 渡辺真 2017/01/16(月)11:52 ID:l394ym3c(1/2) AAS
>>6
>Call 文とかLET文とか、結構使い道があった。

'$lang:
9
(2): 渡辺真 2017/01/16(月)11:54 ID:l394ym3c(2/2) AAS
>>6
>Call 文とかLET文とか、結構使い道があった。

'$lang:"fblite"
とすると、Call 文、LET文が使えるようになります。
http://makoto-watanabe.main.jp/freebasic/CompilerDialects.html
試してみては、いかがでしょう。
10: 2017/01/16(月)20:59 ID:nwZac5ew(1) AAS
>>8-9 それ絶望的。現在
ライブラリーの総ファイル数約100。
内、FreeBasic 要に書き換えた
ファイルが約40、
局所ルーチン 53
大域ルーチン 646
と合計700のルーチンがある。100位は、FreeBasic用に新規に作成したもの。
例 Function (適当)(IAA As Long)の他に、AS Integer, As Byte 等FreeBasic で新規に作られた変数型対応。

これを全部 Call文に書き換えて、、、というのは絶望に近い。

なお、引数を伴わないFunction 文に関しては、無意味な引数をつけることで、引数なしの場合を想定しないで済むようにしている。
省1
11
(1): 2017/01/18(水)20:22 ID:jwPQ/iiW(1/5) AAS
参照関係を調べる時に使うルーチン
Public Function RoutineImmediateStringCat(InLineString As String, OutLineString As String) As Long
'*-* 即値 の文字列をヌルに書き換える
Dim As String BString
'Dim As String CH22String
Dim As Long IAA, IBB, iModeLong
RoutineImmediateStringCat = 0
iModeLong = 0&: 'CH22String = Chr$(&H22)
OutLineString = ""
For IAA = 1& To Len(InLineString)
省17
12: 2017/01/18(水)20:24 ID:jwPQ/iiW(2/5) AAS
>>11 のつづき。
自己書き換えルーチンの場合に、目印とする行が即値で定義されている場合が多い。
即値を目印と勘違いするルーチンとなる場合があるので、即値を消す作業を行う。
13
(1): 2017/01/18(水)20:25 ID:jwPQ/iiW(3/5) AAS
ロボッチチェックに引っかかってちょっと分割する。
Public Function RoutineCommentLineCat(InLineString As String, OutLineString As String) As Long
Const TakaSubRoutineNo as long = 21&
'*-* コメント行をヌルに置き換える

Dim As String BString
'Dim CH22String 大域
Dim As Long IAA, IBB, iModeLong

RoutineCommentLineCat = 0
'CH22String = Chr$(&H22)
OutLineString = Trim$(InLineString)
省9
14
(1): 2017/01/18(水)20:26 ID:jwPQ/iiW(4/5) AAS
ElseIf (InStr(OutLineString, "'") <= 0&) Then
Else
iModeLong = 0&
For IAA = 1& To Len(OutLineString)
BString = Mid$(OutLineString, IAA, 1)
IBB = Asc(BString)
Select Case iModeLong
Case 0&
If (IBB = &H22) Then
iModeLong = 10&
省16
15: 2017/01/18(水)20:36 ID:jwPQ/iiW(5/5) AAS
>>13-14はコメント行を消す作業。コメント行か実行文か判断は面倒なので、
一括して消してしまう。
この2つのルーチンが主要なもので、他には、連続した空白の削除、TAB文字を空白に書き換える等の処理が必要。
こっちは比較的簡単なので、すぐ作れると思う。
Function 文で定義したルーチンの場合、
先頭が1文字目にある場合、戻り値を使わない場合の参照方法。
戻り値を使う場合には、先頭文字の直前(左側)が、演算子の場合が多い。
ということで、演算子であるかのチェックが必要。その他、()や空白、TAB文字等も演算子とみなして処理する。

なんとか、どのファイルの内容を参照しているか、を一覧表で表す見込みが立った。
16: 2017/01/21(土)05:13 ID:ktEIEfUe(1) AAS
>>5
「=」を見つけて、左側の変数が定義される、として処理したまでは良かった。
例外が見つかってしまった。
Abool = (Along = Blong)
Abool = TekitoBool(Along = Blong, (適当な引数))
論理演算子「=」の取り扱い。
Fotran でなぜ .EQ. を使っていたのかわかるような気がした。
17: 2017/01/22(日)22:39 ID:THvjeSOw(1) AAS
>>8-9 を受けて、Function 文から Sub 文への変更の可能性について検討を始めた。
と言っても、自己書き換えルーチン用。
Function 文指定ルーチンのうち、Subroutine に書き換え可能なルーチンは、戻り値が一定値ある必要がある。
参照する必要性がない値を返す場合に限られる。混乱を避けるために専用の型を用意した。
Type Wata As Long
綿は、C:\FbEdit\ や C:\tool\FbEdit\ 内 *.BIファイルに使われていないし、http://www.freebasic.net/ 内にも発見できなかったから、今後使われる見込みがないと見当がつく。
変数型、Wata を指定した。
Public Function taka00_CommonStringSet(ByVal hWin As HWND) as Wata
のように、CALL 文参照可能なサブルーチンは、戻り値の型を綿とした。
今度は、サブルーチン内で、
省11
18: 2017/01/24(火)20:20 ID:YONpxV7Y(1/2) AAS
Declare Function なんたらだけを記載している
TakaCom1.BI
の作成ルーチンで、ちょっと集計を取ってみた。
'簡易障害の発見件数(Function 文) (障害数)/(戻り値総数)/(引数総数)
'%%:01'  可変長文字変数 の末尾が String 以外の末尾を使っている箇所 (1) : 21/ 147/ 970
'%%:02'  符号付32Bit整数変数 の末尾が Long 以外の末尾を使っている箇所 (2) : 0/ 36/ 817
(中略)
'%%:16'  論理変数 の末尾が Bool 以外の末尾を使っている箇所 (16) : 0/ 21/ 13
'%%:28'  草型変数 を引数として使っている箇所 : 0/ 5/ 0
'%%:29'  綿型変数 を引数として使っている箇所 : 0/ 529/ 0
省17
19: 2017/01/24(火)20:25 ID:YONpxV7Y(2/2) AAS
引数無しのルーチンが解釈できないというバクがあるのでこんなのも作ってみた
Function Tekito As Bool
Tekito = 0
End Function

Function Tekito2() As Long
Tekito2 = 0
End Function

Public Function Tekito3 As Bool
Tekito3 = 0
End Function
省5
20
(2): 2017/01/25(水)22:00 ID:Hm7TFQ6k(1) AAS
虚数演算は、皆さんはどのように作ってますか?。
V.B.用ルーチンを転用したら、見事に文法エラーが発生した。
'複素数(虚数)計算
Type Conplex
RealPart As Double
ImagPart As Double
End Type

Public Function ConplexAdd(CA As Conplex, CB As Conplex) As Conplex
Const TakaSubRoutineNo as long = 2&

'Cadd = CA + CB
省4
1-
あと 405 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 2.963s*