首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCamllex是否匹配行首?

OCamllex是否匹配行首?
EN

Stack Overflow用户
提问于 2011-03-16 00:17:54
回答 1查看 627关注 0票数 4

我正在用ocamllex编写一个玩具编程语言,并试图使该语言对缩进更改敏感,python风格,但我遇到了一个问题,与ocamllex的正则表达式规则的行首匹配。我习惯于使用^来匹配行首,但在OCaml中,这是字符串连接运算符。不幸的是,谷歌搜索对我来说并不多见:(有人知道这是如何工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-16 01:00:41

我不确定是否有对零长度匹配符号的显式支持(就像Perl风格的正则表达式中的^,它匹配的是位置而不是子字符串)。但是,您应该能够让您的lexer将换行符转换为显式标记,如下所示:

parser.mly

代码语言:javascript
复制
%token EOL
%token <int> EOLWS
% other stuff here
%%
main:
    EOL stmt                { MyStmtDataType(0, $2) }
  | EOLWS stmt              { MyStmtDataType($1 - 1, $2) }
 ;

lexer.mll

代码语言:javascript
复制
{
 open Parser
 exception Eof
}
rule token = parse
    [' ' '\t']           { token lexbuf }     (* skip other blanks *)
  | ['\n'][' ']+ as lxm  { EOLWS(String.length(lxm)) }
  | ['\n']               { EOL }
  (* ... *)

这是未经测试的,但总体思路是:

  • 将换行符视为紧跟在换行符后面的空格,并将其长度作为空格传递

注意:如果输入不包含\n,则需要对输入进行预处理,以便从单个one开始。

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

https://stackoverflow.com/questions/5314662

复制
相关文章

相似问题

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