C # Получение функций, перечислений и значений в перечислениях из файла - PullRequest
0 голосов
/ 14 февраля 2011

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

/**  
info info info  
*/  
enum MyEnum  
{  
    Myvalue = 1,  
    Mysecondvalue,  
}

/**  
more info  
*/  
public MyFunction();

Мне нужно получить имя MyEnum и значения без "= 1" и "," и т. Д. Мне также нужна информация и MyFunction без ";" есть идеи как это сделать?

edit: это не для скомпилированных файлов, это из файлов, которые могут рассматриваться как txt

Ответы [ 3 ]

0 голосов
/ 15 февраля 2011

Я бы взглянул на http://www.antlr.org/, который является синтаксическим анализатором, используемым nhibernate.

0 голосов
/ 15 февраля 2011

Хорошо, нужно немного почистить и починить, но у меня все получилось.Не уверен, почему я не думал об этом раньше, но вот что я делаю.Я читаю файлы по одной строке за раз, проверяю их перечисление, общедоступные и т. Д., А затем делаю то, что хочу.enum довольно хитрый и не совсем работающий, несколько ошибок.в перечислении я проверяю, является ли это перечислением, если это так, пока в строке статистики с помощью "}" я не добавлю найденные значения.Но все равно спасибо за ваши ответы, если я не получу его на работу!;)

0 голосов
/ 15 февраля 2011

Учитывая, что они не скомпилированы и являются файлами сценариев этот вопрос укажет вам правильное направление.

Мое решение для упрощения задачи состоит в использовании одного из множества синтаксических анализаторов языкатамВ .NET я предпочитаю Gold Parser - скачайте его, возьмите языковой файл C # , откройте файл грамматики в инструменте и просто нажмите нижнюю кнопку со стрелкой вправо 4 раза, покавы получите запрос на сохранение файла CGT.

После этого следуйте этим инструкциям для использования файла CGT для интерпретации файла сценария C # с помощью механизма Calitha.В примере используется синтаксис поискового запроса, но вы можете легко его адаптировать:

private void _lalrParser_OnTokenRead(LALRParser parser, TokenReadEventArgs e)
{
     // See if the token's name is enum, next time round grab the names/values
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...