Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ocaml流输入类型语法_Ocaml_Lexer - Fatal编程技术网

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版本4.02.5中构建一个lexer,我似乎无法使用流类型,而且我几乎找不到任何对Ocaml有用的东西。我读到的大部分内容都过于复杂,没有从文件中获取字符输入并对其进行词法分析的示例


我收到的错误是在我的第一个流声明中,具体的语法位置在“[对流语法的直接支持已从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
;;