Bison: Внедрение кода после правил

Эй, ребята, я хотел бы спросить кого-нибудь, кто внедрил язык в bison.

Сколько времени потребуется на реализацию кода после того, как вы закончите все правила? Я не знаю, должен ли я это делать или нет. В настоящее время я нахожусь на уровне 600 LoC (считая среднюю часть %%)

Сколько времени потребуется для реализации кода? Я знаю, что это будет варьироваться, но сколько времени у вас ушло на реализацию?

Это займет дни? месяцы? или много месяцев/лет? Если две недели или меньше, я могу пойти дальше и сделать это. Если это больше, чем 2 месяца, я не буду рассматривать это (по крайней мере, на данный момент).

Просто прошу оценить. Мне нужно также рассмотреть резервный код. Однако преобразование языка в C++ или C# должно быть тривиальным. В любом случае, я хочу получить приблизительную оценку.


person Community    schedule 11.09.2010    source источник
comment
Этот вопрос полностью зависит от семантики вашей грамматики. Я считаю, что количество 600 относительно велико даже для языков порядка сложности C. Я подозреваю, что вы не создаете эффективных промежуточных представлений.   -  person msw    schedule 11.09.2010
comment
Я думаю, что для плохо определенного языка даже хорошо определенная грамматика бизона может легко быть › 1KLoC.   -  person Johannes Schaub - litb    schedule 11.09.2010
comment
@msw: это наравне с C ++, однако подсчет включает пробелы, поскольку у меня нет другого способа подсчета строк, кроме как вручную.   -  person    schedule 12.09.2010
comment
litb: Вот почему я хотел узнать у тех, кто это сделал. Похоже, мне нужны только некоторые основные функции, а остальные просто форматируют параметры по-разному/синтаксис для вызова указанных основных функций. Я не могу сказать, будет ли это долго или нет. Кроме того, там много пробелов   -  person    schedule 12.09.2010


Ответы (2)


Я мог бы дать вам гораздо лучший ответ, если бы имел представление о том, как выглядит ваш код. Учитывая, что это 600 строк (только для бизона, а не для флекса?), я сомневаюсь, что вы сможете заставить его работать за две недели. Возможно, к тому времени вы сможете что-то напечатать, но я сомневаюсь, что вы заставите это «полностью работать» в течение месяца. В основном это связано с тем, что «это займет больше времени, потому что это ваш первый раз» и «первая большая вещь, которую вы напишете на языке, вероятно, потребует полного рефакторинга, потому что вы не разработали ее так, чтобы она хорошо работала с языком. ."

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

person Mike DeSimone    schedule 12.09.2010
comment
+1 Лексер тоже зверь. 240-строчный банкомат. У вас есть комментарий по поводу размера лексера? - person ; 12.09.2010
comment
Опять же, не могу сказать, не имея представления о том, что вы пытаетесь сделать. Лексер для SQL может получить такой объем из всех ключевых слов. - person Mike DeSimone; 12.09.2010
comment
Язык мой собственный, похожий на C++. В нем есть шаблоны, оператор, перегружающий все, что есть в C++, но другой синтаксис (нет конфликтов. Для этого требуется другой синтаксис) и некоторые новые функции. - person ; 13.09.2010
comment
Тогда я бы поставил на два месяца плюс столько времени, сколько вам понадобится, чтобы изучить AST и, возможно, RTL. Возможно, вы сможете запустить что-то базовое за пару недель, которое работает с несколькими входными файлами, но большая часть вашего кода должна будет обрабатывать ошибки ввода и способы их корректной обработки. Это занимает много времени, так как всегда есть случай, когда вы забыли, что пользователь найдет. Даже если все, что вы делаете, — это перевод на C++ или C# (остерегайтесь эффекта внутренней платформы и изобретения колеса), вам все равно нужно уловить все и убедиться, что ваш вывод не содержит ошибок. - person Mike DeSimone; 13.09.2010

Вы слишком скромничаете с тем, что пытаетесь реализовать.

Но я сделаю категорическое заявление: если вы пытаетесь реализовать язык с прокси-мерами, которые вы цитируете, и не являетесь опытным разработчиком языка (например, по крайней мере одна успешная, новая, работающая, полезная и использованная реализация), вы над головой.

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

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

Языковой дизайн очень и очень трудно сделать хорошо.

person msw    schedule 12.09.2010
comment
Это хорошо и все такое, но все правила выполнены, и мне просто интересно, стоит ли мне сделать решительный шаг и реализовать код или оставить только проверку синтаксиса. Я попытался использовать облегченную версию, чтобы понять, как правильно все реализовать. В начале у меня было много дампов ядра. Я понимаю это сейчас. Но в любом случае, поэтому мне интересно, можно ли это сделать полный рабочий день за месяц (а не за 2 недели) или нет. - person ; 12.09.2010
comment
Если вы не скажете нам язык или не намекнете на язык, у нас ничего не получится. - person msw; 12.09.2010
comment
это мой собственный аналог C++. В нем есть шаблоны, оператор, перегружающий все, что есть в C++, но другой синтаксис (нет конфликтов. Для этого требуется другой синтаксис) и некоторые новые функции. - person ; 13.09.2010