Я реализую парсер на С++ для параметризованных строк (которые используются для указания некоторых возможностей терминала для терминала). Затем я наткнулся на это % encoding
на справочной странице terminfo:
%l push strlen(pop)
Итак, мой вопрос заключается в том, что всякий раз, когда мы помещаем что-либо в стек, это происходит, когда встречаются следующие % encodings
:
%p[1-9] push ith parm
%’c’ push char constant c
%{nn} push decimal constant nn
%l push strlen(pop)
%+ %− %* %/ %m (arithmetic): push(pop integer2 op pop integer1)
%& %| %^ (bit operations): push(pop integer2 op pop integer1)
%= %> %< (logical operations): push(pop integer2 op pop integer1)
%A %O (logical operations): and, or
%! %~ (unary operations): push(op pop)
И всякий раз, когда они встречаются и их результаты вычисляются, и когда результаты должны быть помещены в стек, тогда либо целое число (включая 0 или 1 для логических результатов), либо символ будут помещены в стек. , то означает ли %l encoding
что-либо из следующего:
извлечь одно значение из стека и
if a character push 1 onto stack
иif an integer push #digits_in_that_integer onto the stack
.(поскольку
%l
написано в справочных страницах с использованиемstrlen
) извлечь строку из стека (чтобы извлечь строку : продолжайте выталкивать до тех пор, пока стек не станет пустым), а затем поместите длину извлеченной строки обратно в стек.
Итак, мой вопрос: что означает %l push strlen(pop)
, о какой длине идет речь?
Дополнительный вопрос: правильный ли способ извлечения строки в случае параметризованных строк terminfo (во втором пункте, упомянутом выше)?
Изменить: как указал Томас Дики, теперь я имею в виду этого человека страница термининформации.