首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml中的扫描和负整数字面值

OCaml中的扫描和负整数字面值
EN

Stack Overflow用户
提问于 2015-04-19 13:11:11
回答 1查看 281关注 0票数 2

根据OCaml手册,整数字面值可以是负的。例如,-321是一个有效的整数文本。

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

因此,表达式8-3应该分解为两个词汇符号8-3,从而导致类型错误,而不是将其分解为8-3三个词汇符号,从而进行二进制操作。但第二种解释是我在托普莱尔评价这个表达式时得到的。

我是在手册中遗漏了什么,还是真的不完整?如果是后一种情况,手册可能应该被修复。

EN

回答 1

Stack Overflow用户

发布于 2015-04-19 13:45:46

在lexer.mll语法定义的lexer级别( OCaml )中,整数字面值是不带-前缀的。例如,

代码语言:javascript
复制
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中作了解释。手册解释了一些与实现不同的东西,但它说明了公约。我认为它不需要非常精确地执行。您可以在page.php创建一张票,如果您认为它是固定的。

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

https://stackoverflow.com/questions/29730302

复制
相关文章

相似问题

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