代码翻译器的宏

代码翻译器的宏

是否存在使用某些代码“翻译”标记的现有宏?例如:

\def\code{{{a,b},{b,c},{c,a}}}
\translate[\code]{caac} % => would typeset "abba"

或者更好的是这样的:

\def\code{{{ab,ba},{ac,ca},{b,c}{c,b}}}
\translate[\code]{abbcac} % => would typeset "bacbca"

代码定义的语法并不重要。

如果不存在这样的宏,那么欢迎任何提议来获得该问题的有效解决方案。

谢谢 :)

答案1

(编辑:我最初的答案的第一个解析器没有使用正确的规则。)

以下是 TikZ/PGF 解决方案:

\documentclass{standalone}
\usepackage{pgf}
\usepgfmodule{parser}

\pgfparserdef{myparser}{initial}{the letter a}{b}
\pgfparserdef{myparser}{initial}{the letter b}{c}
\pgfparserdef{myparser}{initial}{the letter c}{a}
\pgfparserdef{myparser}{initial}{the character ;}{\pgfparserswitch{final}}


\pgfparserdef{myparser2}{initial}{the letter a}{\pgfparserswitch{s2}}
\pgfparserdef{myparser2}{s2}{the letter b}{ba\pgfparserswitch{initial}}
\pgfparserdef{myparser2}{s2}{the letter c}{ca\pgfparserswitch{initial}}
\pgfparserdef{myparser2}{initial}{the letter b}{c}
\pgfparserdef{myparser2}{initial}{the letter c}{b}
\pgfparserdef{myparser2}{initial}{the character ;}{\pgfparserswitch{final}}

\newcommand\myparserone[1]{%
  \expandafter\pgfparserparse\expandafter{\expandafter myparser\expandafter}#1;%
}

\newcommand\myparsertwo[1]{%
  \expandafter\pgfparserparse\expandafter{%
    \expandafter myparser2\expandafter}#1;%
}

\begin{document}
\textbf{\pgfparserparse{myparser}caac; \pgfparserparse{myparser2}abbcac;}
\emph{\myparserone{caac} \myparsertwo{abbcac}}
\end{document}

结果:

解析器结果

答案2

第一个方案的一个合理有效的实现是

\def\translate[#1]#2{{%
\expandafter\xlc#1\relax
\lowercase{#2}}}

\def\xlc#1{%
 \ifx\relax#1\else
 \xxlc#1%
 \expandafter
 \xlc
 \fi}

\def\xxlc#1,#2{\lccode`#1=`#2 }

\def\code{{a,b}{b,c}{c,a}}

\translate[\code]{caac}


\bye

如果通过纯 TeX 运行,则会排版 abba。

相关内容