Я разбираюсь, как реализовать отступ в качестве разделителей блоков в bison + flex. Прямо как в питоне. Я пишу свой собственный язык программирования (в основном для развлечения, но я собираюсь использовать его вместе с игровым движком), я постараюсь придумать что-то особенное, что минимизирует шаблон и максимизирует скорость разработки.
Я уже написал компилятор (на самом деле `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, я буду рад это услышать.