gpt4 book ai didi

operators - OCaml 中的扫描和负整数文字

转载 作者:行者123 更新时间:2023-12-03 07:56:26 25 4
gpt4 key购买 nike

根据OCaml manual ,整数文字可以是负数。例如,-321 是一个有效的整数文字。

手册还指出,词汇歧义是根据最长匹配规则解决的:当一个字符序列可以通过几种不同的方式分解为两个标记时,保留的分解是最长的分解第一个 token 。

因此表达式 8-3 应分解为两个词法符号 8-3 导致类型错误,而不是分解为三个词法符号 8-3,给出二进制运算。但第二种解释是我在顶层评估此表达式时得到的结果。

我是否从手册中遗漏了某些内容,或者关于该主题的内容确实不完整?如果是后者,手册可能应该修复。

最佳答案

在 OCaml 语法定义的词法分析器级别 (lexer.mll) 中,定义整数文字时不带 - 前缀。例如,

let decimal_literal =
['0'-'9'] ['0'-'9' '_']*

let int_literal =
decimal_literal | hex_literal | oct_literal | bin_literal

-符号的解析是在解析器(parser.mly)级别完成的。这样 8-3 可以解析为 (8)-(3) 而不是 8 (-3)。唯一的 -3 在解析器级别也被解析为负整数常量。这就是事情的实现方式。

前缀-的异常处理在http://caml.inria.fr/pub/docs/manual-ocaml/expr.html#sec138中有解释。 。该手册解释了与实现不同的内容,但它说明了约定。我觉得实现起来不需要非常精确。您可以通过 http://caml.inria.fr/mantis/my_view_page.php 创建票证如果您觉得它已修复。

关于operators - OCaml 中的扫描和负整数文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730302/

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