yacc - 从 BNF 语法派生状态机

标签 yacc bison bnf pushdown-automaton

我正在尝试整理 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/

相关文章:

c - 为什么 `int test {}`是C语言BNF中的函数定义

bnf - 描述某事,我应该使用 Backus-Naur 表格吗?

c# - 尝试为 bison/wisent 构建 C# 语法

c++ - 通过 Bison/Yacc 中的节点的简单字符串

c++ - 创建 C/C++ 解析器/分析器的好工具

c++ - Bison 中的 std::shared_ptr 导致成员错误

在 yacc 中连接字符串

从 bison 或 yacc 过滤 y.output?

Javascript函数声明 Bison 语法reduce/reduce错误

actionscript-3 - AS3语法: Most accurate