我正在尝试整理 XSS 安全字符串插值方案的概念证明。
给定一个带替换的字符串,
"Hello <b>$planetoid</b>!"
我想把它分解成文字部分和替换 ("Hello<b>" planetoid "</b>!")
然后在文字部分从左到右运行状态机。当我达到一个内插值(上面的 planetoid
)时,我需要能够从状态转到适当的转义函数。
有谁知道如何使用 lex/yacc/bison 派生状态机并能够将语法中的标签与输出状态相关联的示例?我想派生一个状态机,我可以在 javascript 中同时使用它,并尝试替换 PHP 的底层字符串实现。
描述了我这样做的原因 here .
干杯, 麦克
最佳答案
一般而言,无法为可以用 BNF 表示的文法创建状态机。状态机只能识别常规语言,而 BNF 可以指定上下文无关语言。 Yacc 可以创建解析器。这样就足够了吗?
关于yacc - 从 BNF 语法派生状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684502/