首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ocamllex中的yytext等效项

ocamllex中的yytext等效项
EN

Stack Overflow用户
提问于 2012-12-27 03:20:17
回答 2查看 115关注 0票数 1

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

代码语言:javascript
复制
wsorword         :  WS 
                    {
                      strcpy($$, yytext);
                    }
                 |  WORD
                    {
                      strcpy($$, yytext);
                    }
                 ;

如何处理ocamllex/ocamlyacc中WS或WORD返回的词位?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-27 04:05:26

我会在mly文件中将我的标记定义为:

代码语言:javascript
复制
%token<string> WORD WS

mll文件中,我将使用以下操作:

代码语言:javascript
复制
 rule lexer = parse
   | ws                    { WS (Lexing.lexeme lexbuf) }
   | word                { WORD (Lexing.lexeme lexbuf) }

当然,其中wsword是其各自标记的正则表达式。

最后,语法规则变成:

代码语言:javascript
复制
wsorword: 
  WS             { $1 }
| WORD        { $1 }
;
票数 2
EN

Stack Overflow用户

发布于 2012-12-27 03:48:13

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档