我正在 C++ 中为参数化字符串实现解析器(用于为终端指定一些终端功能)。然后我在terminfo% encoding
的手册页上遇到了这个:
%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 的参数化字符串(在上面提到的第二个要点中)的情况下弹出字符串的方法是否正确?
编辑:正如Thomas Dickey所指出的,现在我指的是 terminfo 的手册页。