Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Парсер Добавлено: 31.01.06 09:38  

Автор вопроса:  Павел | Web-сайт: www.vbnet.ru | ICQ: 326066673 
Такая вот наукоёмкая вещь понадобилась... Sharp наверное смог бы
помочь, но по некоторым причинам его сейчас не бывает в онлайне :(

Нужно написать парсер языка программирования. Язык специфический:
некая смесь JavaScript и C#.

С чего начать?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 31.01.06 10:18
Сначала разбор кода по строчкам, потом сброс начальных и конечных пробелов и табов, дальше поиск ключевых слов в тех местах, где им положено быть. Потом тест на правила языка: знаки присваивания, скобки, точки с запятыми.. Отдельно прийдется писать парсер разбора выражений (типа eval() в js для математики и для логических операций). Сразу, ессно, повторяй регулярные выражения на том, на чём пишешь. Кстати, какая цель парсера: выдирать части кода (как msxml), раскрашивать синтаксис, проверять корректность в тексте, прежде, чем скармливать код компилятору? И что это за язык такой "JavaC#"?

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 31.01.06 10:45
Основная задача - преобразовать код на этом языке в какое-то подобие CodeDOM. Ну вот скажем такой простенький примерчик кода:

namespace Samples
{
    class Person : SomeClass
    {
        var _firstName = 'Vasya';

        property firstName
        {
            get
            {
                return _firstName;
            }
            set(value)
            {
                _firstName = value;
            }
        }

        function hello()
        {
            alert('Hello, I'm ' + this.firstName);
        }
    }
}


В итоге я должен получить модель CodeDOM... Как бы это получше выразить... Ну представим это в виде XML, так проще :)

<Code>
  <NameSpace name="Samples">
    <Class>
      <Inheritance base="SomeClass" />
      <Field name="_firstName">
        'Vasya'
      </Field>
      <Property name="firstName">
        <Get>
          return _firstName;
        </Get>
        <Set>
          _firstName = value;
        </Set>
      </Property>
      <Method name="hello">
        alert('Hello, I'm ' + this.firstName);
      </Method>
    </Class>
  </NameSpace>
</Code>


Думаю, общая идея понятна...

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 31.01.06 10:46
Точнее, это не совсем полная CodeDOM, но мне в принципе такой деализации модели будет достаточно :) Главное - распарсить основные структурные элементы. Сам программный код можно не трогать.

Ответить

Номер ответа: 4
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #4 Добавлено: 31.01.06 11:37
Для подобных вещей созданы компиляторы компиляторов. Ему задаётся формализованное описание грамматики языка, он выдаёт исходный код компилятора для такого языка.
Возможно, если обработать напильником, получится искомое.

http://bbs.vbstreets.ru/viewtopic.php?t=20283

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 31.01.06 11:48
Мне компилятор не нужен. Конечная цель - транслятор из этого языка в обычный JavaScript. Так как изменения по сравнению с JavaScript будут мизерные, собственно даже парсить программный код не нужно. Только основные структурные конструкции (нэймспэйсы, классы, свойства, методы и т.д.).

Ответить

Номер ответа: 6
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #6 Добавлено: 03.02.06 18:06
Используй RegExp. Так проще. Больше ничего подсказать не могу. Лично я когда писал язык использовал RegExp.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам