ocaml流输入类型语法
我试图在Ocaml版本4.02.5中构建一个lexer,我似乎无法使用流类型,而且我几乎找不到任何对Ocaml有用的东西。我读到的大部分内容都过于复杂,没有从文件中获取字符输入并对其进行词法分析的示例ocaml流输入类型语法,ocaml,lexer,Ocaml,Lexer,我试图在Ocaml版本4.02.5中构建一个lexer,我似乎无法使用流类型,而且我几乎找不到任何对Ocaml有用的东西。我读到的大部分内容都过于复杂,没有从文件中获取字符输入并对其进行词法分析的示例 我收到的错误是在我的第一个流声明中,具体的语法位置在“[对流语法的直接支持已从OCaml版本3.03中删除,该版本于2001年底发布 此后,camlp4提供了对这些语法扩展的支持 但是,camlp4本身现在已被弃用,取而代之的是ppx。由于您使用的是2015年以后的旧版本OCaml 4.02,ca
我收到的错误是在我的第一个流声明中,具体的语法位置在“[对流语法的直接支持已从OCaml版本3.03中删除,该版本于2001年底发布 此后,camlp4提供了对这些语法扩展的支持 但是,camlp4本身现在已被弃用,取而代之的是ppx。由于您使用的是2015年以后的旧版本OCaml 4.02,camlp4可能会上市 OCaml 4.02的手册说明如下: 使用流解析器语法的OCaml程序应使用-pp camlp4o选项编译为ocamlc和ocamlopt。对于交互式使用,请运行OCaml并发出load dynlink.cma;;命令,然后是load camlp4o.cma;;命令
现代ocaml中最接近流语法的东西是什么?是否有一些自动转换程序?这里最近讨论了这一点:讨论中的一个建议是一个解析器组合器库,如下所示:
open Printf;;
open Stream;;
type sign =
Plus
| Minus;;
type atom =
T
| NIL
| Int of int
| Ident of string;;
type token =
Lparen
| Rparen
| Dot
| Sign of sign
| Atom of atom;;
Stream.t char s from "lines.txt";;
let rec spaces s=
match s with parser
[< '' '|' '\t' | '\n' ; _ >] -> spaces s (* ERROR HERE ON '[<' *)
| [< >] -> ()
;;
let rec lexid str s =
match s with parser
[< ' 'a'..'z'| 'A'....'Z'| '0'...'9' as c; _ >] -> lexid (str ^ (Char.escaped c)) s
| [< >] -> str;;
let rec lexint v s=
match s with parser
[< ‘’0’..’9’ as n; _ >] -> lexint ((10*v)+(int_of_string(Char.escaped n))) s
| [< >] -> v
;;