Определение интерполяции из Википедии Я только изучаю flex/bison и пишу моя собственная оболочка с ним. Я пытаюсь найти хороший способ интерполяции переменных. Мой первоначальный подход к этому заключался в том, чтобы выполнить гибкое сканирование для чего-то вроде ~ для моего домашнего каталога или $myVar , а затем установить yyval.string на то, что возвращается с помощью функции поиска. Моя проблема в том, что это не помогает мне, когда в тексте появляется один токен:
kbsh:/home/kbrandt% echo ~
/home/kbrandt
kbsh:/home/kbrandt% echo ~/foo
/home/kbrandt /foo
kbsh:/home/kbrandt%
Определение lex, которое у меня есть для переменных:
\$[a-zA-Z/0-9_]+ {
yylval.string=return_value(&variables, (yytext + sizeof(char)));;
return(WORD);
}
Затем в моей грамматике у меня есть такие вещи, как:
chdir_command:
CD WORD { change_dir($2); }
;
Кто-нибудь знает хороший способ справиться с такими вещами? Я все делаю неправильно?