6

Web ページの作成に使用するスクリプト言語を作成していますが、どこから始めればよいかわかりません。

次のようなファイルがあります。


mylanguagename(main) {
       OnLoad(protected) {
              Display(img, text, link);
       }

       Canvas(public) {
              Image img: "Images\my_image.png";
                    img.Name: "img";
                    img.Border: "None";
                    img.BackgroundColor: "Transparent";
                    img.Position: 10, 10;

              Text text: "This is a multiline str#ning. The #n creates a new line.";
                   text.Name: text;
                   text.Position: 10, 25;

              Link link: "Click here to enlarge img.";
                   link.Name: "link";
                   link.Position: 10, 60;

                   link.Event: link.Clicked;
       }

       link.Clicked(sender, link, protected) {
              Image img: from Canvas.FindElement(img);
                    img.Size: 300, 300;
       }
}

...そして、上記のテキストが Windows Scripting Host をターゲットにできるようにする必要があります。しばらく前にネット上にたくさんのドキュメントがあったので、これができることは知っていますが、今はそれらを見つけることができないようです.

誰かが助けてくれますか、それとも私を正しい方向に導いてくれますか?

ありがとう

4

10 に答える 10

3

構文解析と言語作成について理解しておくべきことは、コンパイラー/インタープリターの作成は、主に入力テキストに対して行われる一連のデータ変換に関するものであるということです。

通常、入力テキストから、最初に一連のトークンに変換します。各トークンは、言語の概念またはリテラル値を表します。

トークン ストリームから、通常は中間構造 (通常は、書かれたコードを記述する何らかのツリー構造) を作成します。

このツリー構造は、最適化を含むさまざまな理由で検証または変更できます。

それが完了したら、通常、ツリーを別の形式 (アセンブリ命令または別の言語のプログラム) に書き出すことになります。実際、C++ の初期のバージョンはストレートな C コードを書き、それを通常の C コンパイラでコンパイルしました。 C ++の知識がまったくありませんでした。したがって、アセンブリ生成ステップをスキップすることは不正行為のように思えるかもしれませんが、その背後には長く誇り高い伝統があります:)

たとえば、特定のパーサー テクノロジを選択することよりも、全体的なプロセスを理解することがおそらくはるかに重要であるため、特定のライブラリについては意図的に提案していません。lex/yacc や ANTLR などを使用するかどうかは、長期的にはあまり重要ではありません。それらはすべて (基本的に) 機能し、さまざまなプロジェクトですべて正常に使用されています。

独自の構文解析を手動で行うことも悪い考えではありません。なぜなら、構文解析がどのように行われるかのパターンを学ぶのに役立つからです。そのため、ブードゥー教のブラックボックスになるよりも、パーサー ジェネレーターを使用する方が理にかなっている傾向があります。 .

于 2010-03-14T08:40:27.490 に答える
2

C# に似た言語は解析が容易ではありません。自然に左再帰の規則がいくつかあります。そのため、それらを適切に処理できるパーサー ジェネレーターを使用する必要があります。ANTLRはよく合います。

PEG の方が適している場合は、これを試してください: http://www.meta-alternative.net/mbase.html

于 2010-03-13T21:35:05.713 に答える
1

独自の言語を作成してからトランスレータを実行してJavascriptに変換するのではなく、Javascriptを拡張して目的の処理を実行してみませんか?

jQueryを見てください-それは非常に自然で流暢な構文で多くの強力な方法でJavascriptを拡張します。それはあなた自身の言語を持っているのとほとんど同じくらい良いです。人々がそれのために作成した多くの拡張機能、特にjQueryUIも見てください。

于 2010-03-13T23:22:20.260 に答える
1

あなたが本当にこれを行うことに専念していると仮定すると、ここに行く方法があります. これは通常、あなたがすべきことです: source -> SCANNER -> tokens -> PARSER -> syntax tree

1) 言語を解析するスキャナー/パーサーを作成します。文法を記述して、構文をスキャン/解析し、トークン化/検証できるパーサーを生成する必要があります。

ここで最も簡単な方法は、Irony を使用することだと思います。これにより、パーサーをすばやく簡単に作成できます。ここが良い出発点です

http://www.codeproject.com/KB/recipes/Irony.aspx

2) 構文ツリーを作成する - この場合、実際の構文ツリーではなく単純な XML 表現を作成することをお勧めします。これにより、後で DOM の XML 表現をたどって VB/Java Script を吐き出すことができます。要件が複雑な場合 (コンパイルしたいなど)、DLR Expression Tree を作成するか、Code DOM を使用できますが、ここではコンパイラではなくトランスレータについて話していると思います。

しかし、ちょっと待ってください-教育目的でない場合は、「スクリプト」を最初からxmlとして表すことを検討してください。そうすれば、VB / Javaスクリプト/ Htmlを吐き出す前に、間にスキャナー/パーサーを避けることができますそれ。

于 2010-03-23T11:55:00.853 に答える
1

C# プログラムを JavaScript に変換したいですか? Script#でこれを行うことができます。

于 2010-03-13T11:51:32.447 に答える
0
  1. リトル言語用の言語プロセッサの構築 を確認してください。とても良いイントロだと思います。実際、テンプレート言語パーサーで問題が発生した 2 日前にコピーを調べたところです。

  2. 可能な限り XML を使用してください。これを本番環境で使用したい場合は、レクサーとパーサーを手作業でいじる必要はありません。私はこの間違いを数回しました。本当はすべきではないコードをサポートすることになります。あなたの言語は主にテンプレート言語のようです。そこでは XML がうまく機能します。ASPX ファイルが XML であるように。サーバー側のブロックは Javascript で記述でき、必要に応じて変更できます。これが学習演習である場合は、必ず手動で行ってください。

自分の言語を書くことは素晴らしい練習になると思います。大学レベルのコンパイラー作成クラスを受講することも同様です。幸運を。

于 2010-03-23T03:47:07.527 に答える
0

失礼なことはしたくないのですが、なぜあなたはこれをしているのですか?

通常の言語用のパーサーを作成することは、簡単な作業ではありません。やらないでください。

html、javascript、およびcss(および上記の誰かが提案したjquery)を使用しないのはなぜですか

どこから始めればよいかわからない場合は、おそらくこの種の経験がなく、おそらくこれを行う正当な理由、理由がありません.

私はあなたに痛みを救いたい。忘れてください。それはおそらくBAD IDEAです!

M.

于 2010-03-23T03:21:52.237 に答える
0

個人的には、自分に課せられた挑戦はどれも良いと思います。私は、あなたが望むものが実生活の問題に対する本当の解決策である場合、証明された解決策に固執する方がおそらく良いという他の意見に同意します. しかし、あなたが自分で言ったように、この問題を解決することに学問的な関心を持っているのであれば、この問題を解決し続けることをお勧めします。この場合、軌道に乗るためのヒントをいくつか紹介します。

構文解析は実際には簡単な作業ではありません。少なくとも 1 学期はかかる方法です。しかし、それは学ぶことができます。Terrence Parr の言語実装パターンに関する本から始めることをお勧めします。コンパイルと解析に関する素晴らしい本はたくさんありますが、おそらく最も愛され、嫌われているのはDragon Bookです。

これはかなり重いものですが、本当にこれに興味があり、時間があれば、ぜひ見てください。これがロビソン・クルーソーの「全部自分でやる」アプローチだろう。私は最近 LR パーサー ジェネレーターを作成しましたが、それは長い週末に過ぎませんでしたが、多くの本を読み、コンパイラーに関する 2 学期の完全なコースを受講した後です。

時間がない場合、または単に「人間が行うように」パーサーを作成することを学びたくない場合は、いつでも商用または学術的なパーサー ジェネレーターを試すことができます。ANTLRは問題ありませんが、そのメタ言語を学ぶ必要があります。個人的には、 Ironyは優れたツールだと思います。特に、C# 内にとどまり、ソース コードを見て自分で学習できるためです。私たちはここにいて、広告を作成しようとしているわけではないので、このタスクに役立つ小さなツールを CodePlex に投稿しました。オープンソースで無料です

最後のヒントとして、誰かにそれはできないと言われても怖がらないでください。構文解析は難しい理論的問題ですが、学習できないものではなく、ポートフォリオに含めると本当に優れたツールです。開発者が降下再帰パーサーを手で書くことができるということは、たとえそうする必要がないとしても、非常に良いことだと思います。この目標を最後まで追求したい場合は、大学レベルのコンパイラコースを受講してください.1年後に私に感謝します.

于 2012-04-04T20:10:05.010 に答える
0

明らかに、言語を翻訳するために設計された機械が必要です: 構文解析、ツリー構築、パターンマッチング、ターゲット言語ツリー構築、ターゲット言語プリティプリンティング。これらすべてを YACC (または同等のもの) で実行しようとすることはできますが、解析は完全なトランスレータのほんの一部にすぎないことがわかります。これは、構文解析以外にも多くの作業が必要であり、時間と労力がかかることを意味します。

当社のDMS ソフトウェア リエンジニアリング ツールキットは、比較的低コストで完全なトランスレータを構築するための商用ソリューションです。

演習としてゼロから自分でやりたい場合は、それで問題ありません。本当に必要な努力に備えてください。

最後に一言: 良い結果を得ようとすれば、完全な言語を設計するのは困難です。

于 2010-03-13T21:32:42.407 に答える