私はクライアントが非常に基本的なコードを作成できるようにするソリューションを構築しています。今ではいくつかの基本的な構文検証を行っていますが、変数の検証で立ち往生しています。
JSLintがJavascriptを使用してこれを行うことは知っていますが、これを行うための良い方法を誰かが知っているかどうか疑問に思っていました。
たとえば、ユーザーがコードを書いたとしましょう
moose = "barry"
base = 0
if(moose == "barry"){base += 100}
次に、「if」式が正しい構文にあることを明確にする方法を見つけようとしています。変数mooseが初期化されている場合などですが、文字ごとにスキャンせずにこれを実行したい場合、コードはミニ言語です。このアプリケーション専用に構築されているため、非常に基本的であり、メモリなどを管理する必要はありません。
最初にキャリッジリターンで分割し、次にスペースで分割することを考えていましたが、ユーザーが次のようなものを記述しない、moose="barry"
またはif(moose=="barry")
条件の結果をインラインに保持しないと言うことは何もありません。
明らかに、コンパイラーとインタープリターはこれをはるかに大規模に実行しますが、文字ごとに実行するのか、どのように最適化するのかはわかりません。
(他のオプションは、それをPHPに返送して処理し、ブラウザーの責任を放棄することです)
助言がありますか?
ありがとう
ユースケースは限られており、この場合、構文は拡張されません。言語は、クライアントがユーザー入力に基づいて一意のコストを作成できるようにするための単純なスクリプト言語であり、計算を確実にするかどうかに関係なく、最終結果はPHPによって処理されます。エンドユーザーが調整したり、一貫性を確保したりすることはできません。
たとえば、基本コストが1.00ポンドで、フォームに「追加コスト」というフィールドがある場合、言語を使用すると、「追加コスト」フィールドに関連する基本コストを操作できます。
それで
base = 1;
if(additional > 100 && additional < 150){base += 50}
elseif(additional == 150){base *= 150}
else{base += additional;}
これは、言語がどのように使用されるかの基本的な例です。
すべての回答に感謝します。パーサーを調査しました。パーサーの作成は、数千行のコードでいくつかのテストを実行する場合よりもはるかに複雑であり、文字ごとに処理するのに数秒しかかからないことがわかりました。 512MBのメモリを備えたシングルコアP4(これは顧客が使用するよりはるかに少ない)
私は、JavaScriptの代わりにこれを使用して、情報をチェックし、変数などをチェックしながら(後で再コンパイルせずに呼び出す準備ができるように)有効なPHPコードに変換するPHPベースの構文チェッカーを構築することにしました。これはより適切なようです検証プロセスを妨げることなく、より複雑なコードを生成できるようになります
1時間しかかからず、ifステートメントの有効性をチェックでき、ネストされたif、スペース、または奇数の式と混同されないコードがあります。パーサーと本格的なスクリプト言語に対して、チェックする必要のあるものはほとんどありません。もっと長くかかったでしょう
あなたは私に考えることをたくさん与えてくれました、そして私は関連する答えを評価しましたありがとう