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
Ocamlex中的yytext等价物_Ocaml_Yacc_Lex - Fatal编程技术网

Ocamlex中的yytext等价物

Ocamlex中的yytext等价物,ocaml,yacc,lex,Ocaml,Yacc,Lex,我的常规(非ocaml)yacc文件中包含以下内容: wsorword : WS { strcpy($$, yytext); } | WORD { strcpy($$, yytext); }

我的常规(非ocaml)yacc文件中包含以下内容:

wsorword         :  WS 
                    {
                      strcpy($$, yytext);
                    }
                 |  WORD
                    {
                      strcpy($$, yytext);
                    }
                 ;

如何在ocamlex/ocamlyacc中处理WS或WORD返回的lexeme?

好的,您的yacc代码使用的是lex提供的全局变量。OCaml并不禁止全局变量,但它们与编写代码的功能方式不一致。如果您将词法缓冲区设置为全局名称
!lexbufr
(比如),手册上说你可以通过调用
Lexing.lexeme来获取最新的lexeme!lexbufr
。请注意,我自己还没有尝试过这个方法。

好的,您的yacc代码使用的是lex提供的全局变量。OCaml并不禁止全局变量,但它们与编写代码的功能方式不一致。如果您将词法缓冲区设置为全局名称
!lexbufr
(比如),手册上说你可以通过调用
Lexing.lexeme来获取最新的lexeme!lexbufr
。请注意,我自己还没有尝试过这一点。

我会在
mly
文件中将我的令牌定义为:

%token<string> WORD WS
其中,
ws
word
当然是各自令牌的regexp

最后,语法规则变成:

wsorword: 
  WS             { $1 }
| WORD        { $1 }
;

我会在
mly
文件中将我的令牌定义为:

%token<string> WORD WS
其中,
ws
word
当然是各自令牌的regexp

最后,语法规则变成:

wsorword: 
  WS             { $1 }
| WORD        { $1 }
;

强制性MunHIR注释:您应该考虑使用与 OcAMLYACC 语法兼容的方法,并在所有方面都更好(让您编写更紧凑和可读的语法,帮助您调试它们等)。它可以与<代码> OcAMLLeX结合使用。@ GasChe谢谢,我会研究的。强制性MunHIR评论:你应该考虑使用与 OcAMLYACC 文法兼容,并且在各个方面都更好(让你编写更紧凑和可读的语法,帮助你调试它们等等)。它可以与
ocamlex
@gasche一起使用谢谢,我会研究一下。