Я понял, как реализовать отступы как разделители блоков в bison + flex. Так же, как в python. Я пишу свой собственный язык программирования (в основном для удовольствия, но я намерен использовать его вместе с движком игры), я попытаюсь придумать что-то особенное, которое минимизирует шаблон и максимизирует скорость dev.
Я уже написал компилятор (фактически "langToy" для переводчика Nasm) на C, но не смог. По какой-то причине он мог обрабатывать только одну строку во всем исходном файле (ну, я просыпался более 48 часов - так... Знаешь, мозговой кризис).
Я не знаю, легче ли реализовать фигурные скобки и/или начать → конец (у меня нет проблемы с этим), или если это только мой мозг, который блокируется.
Спасибо заранее!
Обновление: Хорошо, я понятия не имею, как это сделать с помощью flex. У меня проблемы с возвратом нескольких парней DEDENT в парсер. Flex/Bison относительно новы для меня.
Обновление 2: Это гибкий файл, который я до сих пор придумал; он не совсем понял:
%x t
%option noyywrap
%{
int lineno = 0, ntab = 0, ltab = 0, dedent = 0;
%}
%%
<*>\n { ntab = 0; BEGIN(t); }
<t>\t { ++ntab; }
<t>. { int i; /* my compiler complains not c99 if i use for( int i=0... */
if( ntab > ltab )
printf("> indent >\n");
else if( ntab < ltab )
for( i = 0; i < ltab - ntab; i++ )
printf("< dedent <\n");
else
printf("= =\n");
ltab = ntab; ntab = 0;
BEGIN(INITIAL);
/* move to next rule */
REJECT;}
. /* ignore everything else for now */
%%
main()
{
yyin = fopen( "test", "r" );
yylex();
}
Вы можете попробовать поиграть с ним, может быть, вы видите, что мне не хватает. возвращение нескольких разделителей было бы легкостью в haXe (return t_dedent (num);).
Этот код не всегда правильно соответствует отступов/разделителей.
Обновление 3: Я думаю, что я откажусь от надежды на flex и сделаю это по-своему. Если кто-нибудь знает, как это сделать в flex, я был бы счастлив услышать это в любом случае.