gpt4 book ai didi

OCamllex 匹配行首?

转载 作者:行者123 更新时间:2023-12-01 01:30:09 24 4
gpt4 key购买 nike

我正在使用 ocamllex 在 OCaml 中编写一种玩具编程语言,并试图使该语言对缩进更改敏感,python 样式,但是在将行的开头与 ocamllex 的正则表达式规则匹配时遇到了问题。我习惯用^匹配一行的开头,但在 OCaml 中它是字符串 concat 运算符。不幸的是,谷歌搜索对我来说并没有出现太多:(有人知道这是如何工作的吗?

最佳答案

我不确定是否明确支持零长度匹配符号(如 Perl 样式正则表达式中的 ^,它匹配位置而不是子字符串)。但是,您应该能够让词法分析器将换行符转换为显式标记,如下所示:

parser.mly

%token EOL
%token <int> EOLWS
% other stuff here
%%
main:
EOL stmt { MyStmtDataType(0, $2) }
| EOLWS stmt { MyStmtDataType($1 - 1, $2) }
;

lexer.mll
{
open Parser
exception Eof
}
rule token = parse
[' ' '\t'] { token lexbuf } (* skip other blanks *)
| ['\n'][' ']+ as lxm { EOLWS(String.length(lxm)) }
| ['\n'] { EOL }
(* ... *)

这是未经测试的,但总体思路是:
  • 将换行符视为 staetment 'starters'
  • 测量紧跟换行符的空格并将其长度作为 int 传递

  • 警告:您需要预处理您的输入以从单个 \n 开始如果它不包含一个。

    关于OCamllex 匹配行首?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314662/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com