Лучший/самый быстрый способ записать синтаксический анализатор в c#

Необходимо будет выйти + с \и потому что \самостоятельно специальный символ в строках Java, необходимо будет выйти из него с другим \.

, Таким образом, Ваша строка regex будет определена как "\\+" в коде Java.

Т.е. этот пример:

String test = "ABCD+EFGH";
test = test.replaceAll("\\+", "-");
System.out.println(test);
15
задан lillq 18 November 2009 в 19:18
поделиться

7 ответов

У меня был хороший опыт работы с ANTLR v3 . Безусловно, самым большим преимуществом является то, что он позволяет писать синтаксические анализаторы LL (*) с бесконечным упреждающим просмотром - они могут быть довольно неоптимальными, но грамматика может быть написана наиболее простым и естественным способом без необходимости рефакторинга для обхода ограничений синтаксического анализатора и производительность парсера часто не имеет большого значения (я надеюсь, что вы не пишете компилятор C ++), особенно в учебных проектах.

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

Взгляните на следующие грамматики ANTLR (перечисленные здесь в порядке возрастания сложности), чтобы понять, как это выглядит и ощущается

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

Вы можете изучить исходный код компилятора Mono C # .

1
ответ дан 1 December 2019 в 01:45
поделиться

Я играл с Иронией . Выглядит просто и полезно.

11
ответ дан 1 December 2019 в 01:45
поделиться

Пока он все еще находится в ранней бета-версии, Oslo Язык моделирования и инструменты MGrammar от Microsoft выглядят многообещающими.

1
ответ дан 1 December 2019 в 01:45
поделиться

Я бы также взглянул на SableCC . Создать грамммер EBNF очень просто. Здесь - простой пример калькулятора C #.

1
ответ дан 1 December 2019 в 01:45
поделиться

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

Вы можете заставить его делать все, что захотите; генерировать код C #, строить другие грамматики, эмулировать инструкции, что угодно.

Это некрасиво, это текстовый формат и LL1, поэтому ваш синтаксис должен это учитывать.

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

0
ответ дан 1 December 2019 в 01:45
поделиться

Здесь есть небольшая статья о построении здесь анализатора LL (1), конечно, вы также можете использовать генератор.

1
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

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