Создание языка сценариев, который будет использоваться для создания веб-страниц

Я создаю язык сценариев, который будет использоваться для создания веб-страниц, но не знаю точно, где начать.

У меня есть файл, который похож на это:


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. Я знаю, что это может быть сделано, потому что раньше было много Документов о нем по всей сети некоторое время назад, но я, может казаться, не нахожу их теперь.

Кто-то может помочь, или запускать меня в правильном направлении?

Спасибо

6
задан Sathyajith Bhat 6 April 2012 в 05:03
поделиться

9 ответов

Итак, вы хотите переводить программы C # на JavaScript? Сценарий № может сделать это за вас.

1
ответ дан 8 December 2019 в 18:34
поделиться

Скорее чем написать свой собственный язык, а затем запустить переводчик, чтобы преобразовать его в Javascript, почему бы не расширить Javascript, чтобы он делал то, что вы хотите?

Взгляните на jQuery - он расширяет Javascript многими мощными способами с очень естественным и свободный синтаксис. Это почти так же хорошо, как иметь собственный язык. Взгляните на множество расширений, которые люди создали для него, особенно на jQuery UI.

1
ответ дан 8 December 2019 в 18:34
поделиться

Вы создаете предметно-ориентированный язык, которого не существует. Вы хотите перевести на другой язык. Вам понадобится подходящий сканер и парсер. Вам, наверное, сказали посмотреть на antlr. yacc / bison или золото. Что с этим пошло не так?

И, к вашему сведению, это забавное упражнение по созданию новых языков, но прежде чем вы начнете делать что-то вроде этого, вы можете хорошо спросить: «Почему? Что дает мой новый язык, чего я не мог Нет другого (разумного) способа? "

5
ответ дан 8 December 2019 в 18:34
поделиться

Языки, подобные C #, нелегко разбирать - есть некоторые естественно леворекурсивные правила. Поэтому вам нужно использовать генератор синтаксического анализатора, который может правильно с ними справиться. ANTLR хорошо подходит.

Если PEG подходит лучше, попробуйте следующее: http://www.meta-alternative.net/mbase.html

2
ответ дан 8 December 2019 в 18:34
поделиться

Очевидно, вам понадобится оборудование, предназначенное для перевода языков: синтаксический анализ, построение дерева, сопоставление с образцом, построение дерева целевого языка, красивое печатание на целевом языке. {{1} } Вы можете попробовать сделать все это с помощью YACC (или его эквивалентов), но вы обнаружите, что синтаксический анализ - это только небольшая часть полного транслятора. Это означает, что нужно сделать гораздо больше , чем просто синтаксический анализ, а это требует времени и усилий.

Наш DMS Software Reengineering Toolkit представляет собой коммерческое решение для создания полнофункциональных переводчиков при относительно умеренных затратах.

Если вы хотите сделать это самостоятельно с нуля в качестве упражнения, это нормально. Просто будьте готовы к тому, что это действительно потребует усилий.

И последнее замечание: создать законченный язык сложно, если вы хотите получить хороший результат.

0
ответ дан 8 December 2019 в 18:34
поделиться

Что нужно понимать в синтаксическом анализе и создании языка, так это то, что написание компилятора / интерпретатора в первую очередь связано с набором преобразований данных, выполняемых для входного текста.

Обычно из введенного текста вы сначала переводите его в серию токенов, каждый токен представляет концепцию на вашем языке или буквальное значение.

Из потока токенов вы обычно затем создаете промежуточную структуру, обычно некую древовидную структуру, описывающую написанный код.

Эта древовидная структура затем может быть проверена или изменена по разным причинам, включая оптимизацию.

После этого вы обычно записываете дерево в какую-либо другую форму - инструкции по сборке или даже программу на другом языке - на самом деле, самые ранние версии C ++ писали прямой код C, который затем компилировался обычный компилятор C, который вообще не знал C ++. Так что, хотя пропуск этапа генерации сборки может показаться обманом, за этим стоит давняя и гордая традиция :)

Я сознательно не вдавался в какие-либо предложения по конкретным библиотекам, так как понимание всего процесса, вероятно, гораздо важнее, чем выбор конкретной технологии синтаксического анализатора, например. Независимо от того, используете ли вы lex / yacc или ANTLR или что-то еще, в конечном итоге неважно. Все они (в основном) работают, и все они успешно использовались в различных проектах.

Даже выполнить собственный синтаксический анализ вручную - неплохая идея, так как это поможет вам изучить шаблоны того, как выполняется синтаксический анализ, и поэтому использование генератора синтаксического анализатора будет иметь больше смысла, чем быть черным шкатулка вуду.

3
ответ дан 8 December 2019 в 18:34
поделиться

Если вы действительно посвятили себя этому делу, вот выход. Обычно это то, что вы должны делать: источник -> СКАНЕР -> токены -> ПАРСЕР -> синтаксическое дерево

1) Создайте сканер / парсер для синтаксического анализа вашего языка. Вам нужно написать грамматику, чтобы сгенерировать синтаксический анализатор, который может сканировать / анализировать ваш синтаксис, чтобы токенизировать / проверять их.

Я думаю, что проще всего использовать Irony, что упростит и ускорит создание синтаксического анализатора. Вот хорошая отправная точка

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

2) Создайте дерево синтаксиса. В этом случае я предлагаю вам вместо этого построить простое представление XML. фактического синтаксического дерева, чтобы вы могли позже пройтись по XML-представлению вашей DOM и выплюнуть VB / Java Script. Если ваши требования сложны (например, вы хотите его скомпилировать или что-то в этом роде), вы можете создать дерево выражений DLR или использовать Code DOM - но здесь, я думаю, мы говорим о переводчике, а не о компиляторе.

Но подождите - если это не в образовательных целях, подумайте о том, чтобы с самого начала представить свой «сценарий» в виде xml, чтобы избежать использования сканера / парсера между ними, прежде чем выплевывать какой-нибудь сценарий VB / Java / HTML из этого.

1
ответ дан 8 December 2019 в 18:34
поделиться
  1. Посмотрите Конструирование языковых процессоров для маленьких языков. По-моему, это очень хорошее введение. На самом деле я только что просмотрел свою копию 2 дня назад, когда у меня возникли проблемы с парсером языка шаблонов.

  2. Используйте XML, если это вообще возможно. Вы не хотите возиться с лексером и парсером вручную, если вы хотите, чтобы эта вещь была в производстве. Я совершал эту ошибку несколько раз. В итоге вы поддерживаете код, который на самом деле не должен поддерживать. Похоже, что ваш язык - это в основном язык шаблонов. XML отлично подойдет для этого. Точно так же, как файлы ASPX являются XML. Ваши блоки на стороне сервера могут быть написаны на Javascript, модифицированы при необходимости. Если это учебное упражнение, то делайте все вручную, во что бы то ни стало.

Я думаю, что написание собственного языка - это отличное упражнение. Также как и посещение занятий по написанию компилятора на уровне колледжа. Удачи.

0
ответ дан 8 December 2019 в 18:34
поделиться

Не хочу показаться грубым ... но зачем вы это делаете?

Создание синтаксического анализатора для обычного языка - нетривиальная задача задача. Просто не делай этого.

Почему бы вам просто не использовать html, javascript и css (и jquery, как предложил кто-то выше)

Если вы не знаете, с чего начать, то, вероятно, у вас нет такого опыта и, возможно, у вас нет веской причины, зачем это делать.

Я хочу избавить вас от боли. Забудь это. Вероятно, это ПЛОХАЯ ИДЕЯ!

М.

0
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: