我一直在学习F#,我想尝试创建一个小的SQL解析器。我发现a tutorial解释了如何通过FsLex和FsYacc这样做,但是,该网站没有提供任何下载链接。在Visual Studio下,通过nuget,我遇到this,然后我下载。它看起来与网站提供的解释非常相似,所以我认为这与问题无关。
我距离它还不远,这是我的两个小文件:
Sql.fs:
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$name[]=$row['name'];
}
SqlParser.fsp:
module Sql
type value =
| Int of int
| Float of float
| String of string
type dir = Asc | Desc
type op = Eq | Gt | Ge | Lt | Le
type order = string * dir
type where =
| Cond of (value * op * value)
| And of where * where
| Or of where * where
type joinType = Inner | Left | Right
type join = string * joinType * where option
type sqlStatement =
{
Table : string;
Columns : string list;
Joins : join list;
Where : where option;
OrderBy : order list
}
以下是我项目的文件/参考文献列表:
module SqlParser
%{
open Sql
%}
%token <string> ID
%token <int> INT
%token <float> FLOAT
%token AND OR
%token COMMA
%token EQ LT LE GT GE
%token JOIN INNER LEFT RIGHT ON
%token SELECT FROM WHERE ORDER BY
%token ASC DESC
%token EOF
// start
%start start
%type <string> start
%%
start:
| { "Nothing to see here" }
%%
这是prebuild命令,它应该与“SqlParser.fsp”文件交互:
References:
- FSharp.Core
- FsLexYacc.Runtime
- mscorlib
- System
- System.Core
- System.Numerics
- System.ValueTuple
AssemblyInfo.fs
Sql.fs
SqlParser.fsp
App.config
packages.config
当我编译时,使用此命令,Visual Studio告诉我“生成失败”,但没有错误,这些列表是空的。当我删除此命令时,项目“正常”编译,实际上文件“SqlParser.fsp”应该生成其他文件(因此预建命令)。
提前谢谢。