Tag: 词法分析器

在C#中编写部分SQL

我需要解析部分SQL查询(它是用于SQL注入审计工具)。 例如 ‘1’ AND 1=1– 应该分解成令牌 [0] => [SQL_STRING, ‘1’] [1] => [SQL_AND] [2] => [SQL_INT, 1] [3] => [SQL_AND] [4] => [SQL_INT, 1] [5] => [SQL_COMMENT] [6] => [SQL_QUERY_END] 他们至少是基于我的SQL的词法分析器,还是C#的bison等任何好的工具(尽管我不想编写我自己的语法,因为我需要支持大多数,如果不是所有MySQL 5的语法)

C#有(直接)flex / yacc端口吗? 或者lexer / parser用于C#的是什么?

我可能错了,但看起来到目前为止C#/ .NET没有直接的flex / bison(lex / yacc)端口。 对于LALR解析器,我找到了GPPG / GPLEX,对于LL解析器,有着名的ANTLR。 但是,我想尽可能多地重用我的flex / bison语法。 对于C#,有没有直接的flex / bison端口? 人们通常使用什么词法分析器/解析器来进行C#? 这个选择有什么理由吗?

手编码解析器

对于你所有的编译器大师,我想编写一个递归下降解析器,我想只用代码来做。 没有从其他语法生成词法分析器和解析器并且不告诉我阅读龙书,我最终会到达那里。 我想进入关于为合理的简单语言实现词法分析器和解析器的细节,比如说CSS。 我想做对了。 这可能最终会成为一系列问题,但现在我开始使用词法分析器了。 可以在此处找到CSS的标记规则。 我发现自己编写这样的代码(希望你可以从这个代码片段中推断出其余部分): public CssToken ReadNext() { int val; while ((val = _reader.Read()) != -1) { var c = (char)val; switch (_stack.Top) { case ParserState.Init: if (c == ‘ ‘) { continue; // ignore } else if (c == ‘.’) { _stack.Transition(ParserState.SubIdent, ParserState.Init); } break; case ParserState.SubIdent: if (c == ‘-‘) […]