类型参数中的“>>”是否使用特殊规则进行标记?

2024-07-03

我很困惑Java规范 http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html关于如何将此代码标记化:

ArrayList<ArrayList<Integer>> i;

规范说:

每一步都会使用尽可能长的翻译,即使结果最终没有生成正确的程序,而另一个词法翻译却可以。

据我了解,应用“最长匹配”规则将产生令牌:

  • 数组列表
  • <
  • 数组列表
  • <
  • Integer
  • >>
  • i
  • ;

这不会解析。当然,这段代码解析得很好。

对于这种情况,正确的规格是什么?

这是否意味着正确的词法分析器必须是上下文无关的?似乎不可能regular http://en.wikipedia.org/wiki/Regular_grammar lexer.


基于阅读@sm4 链接的代码 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/com/sun/tools/javac/parser/JavacParser.java#JavacParser.typeArguments%28boolean%29,看起来策略是:

  • 正常地标记输入。所以A<B<C>> i;将被标记为A, <, B, <, C, >>, i, ;-- 8 个代币,而不是 9 个。

  • 在分层解析期间,当解析泛型和>需要,如果下一个标记以> -- >>, >>>, >=, >>=, or >>>=——只需敲击>关闭并将缩短的令牌推回令牌流。示例:当解析器到达>>, i, ;在处理 typeArguments 规则时,它成功解析了 typeArguments,并且剩余的令牌流现在略有不同>, i, ;,从第一个> of >>被拉下来以匹配 typeArguments。

因此,尽管标记化确实正常发生,但如有必要,在分层解析阶段会发生一些重新标记化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型参数中的“>>”是否使用特殊规则进行标记? 的相关文章

随机推荐

  • PowerShell 正在缓冲 Python 标准输出

    我正在 PowerShell 脚本中运行以下命令 我的问题是 gitstats py 的输出被缓冲 该程序可能需要几分钟的时间 直到最后我才看到任何进度消息 git log m p word diff date iso python d R
  • 非托管内存中托管类标头的布局和大小是多少?

    最近 在这个问题 https stackoverflow com questions 33802676 how to get a raw memory pointer to a managed class 我问过如何在 C 中获取类的原始内
  • 是否可以在 Activity 的一个 中注册两个操作

    我想注册我的启动器活动 以便可以通过单击图标并使用自定义方案打开链接来启动它 我设法让它工作 但我质疑这种方法是否正确 这是我的清单的相关部分
  • Android:浅堆和保留堆有什么区别

    我试图通过以下方式找出应用程序的内存泄漏MAT 在此处list object我发现了一些数值 整数Shallow heap and retained heap柱子 这些值是什么 以及如何知道内存泄漏在哪里 From 尼基塔 萨尔尼科夫 塔尔
  • 在条件样式中使用变量

    我有一个Title乐队与文本域包含计算的Variable V avg perc The 文本域有评估时间 set to Report 同样对于变量 重置类型 现在我试图用一个设置这个字段的背景颜色条件样式但我不断收到一条错误消息 内容如下
  • 如何让 terraform 删除包含 kubernetes 创建的 AWS 资源的 EKS 集群?

    I use terraform在AWS中创建环境 该环境还包含一个 EKS 集群 它集成在 AWS 中并在那里创建一些资源 例如 入口将创建应用程序负载均衡器或路由 53 记录 或者 pvc 将创建卷 有什么好的制作方法terraform
  • 在 Yeoman Generator 中创建空目录

    如何通过 yeoman 生成器创建一个空目录 我看过mem fs 编辑器 https github com sboudrias mem fs editor 但据我所知 目录仅在创建子文件时创建 我尝试在子目录中创建一个文件 然后删除该文件
  • iOS 11 中的 Twitter 共享

    我想请求您对 iOS 11 及更高版本中的 Twitter 共享进行澄清 Apple 官方文档在发布中指出了以下内容 社交帐户已从 iOS 11 的 设置 中删除 第三方应用程序无法再访问这些登录帐户 31687059 以及 Twitter
  • 301重定向/所有图像到CDN

    对于图片库 我必须使用 CDN 因此我创建了一个子域 image example com 该子域通过 CNAME 指向 CDN URL 旧图像路径 http www example com files thumbs 我将图库中的所有图像路径
  • Mysql,检查字段值变化?

    Mysql 检查字段值变化 如果更改值则显示不同的值 table a id size name 1 500 abc 2 200 bcd 3 400 xyz 4 500 bbb 5 200 aaa select s s 1 as index
  • python cx_freeze 问题 ascil

    我想通过使用制作EXE文件py2exe or cx freeze 所以我尝试用 py2exe 制作 exe 文件 但没有成功 所以现在我正在测试cx freeze但它也失败了 如果有人能帮助我 非常感激 以下是setup py文件中cx f
  • 如何忽略文件的后续修改

    我有一个database json 它应该包含我的Zend项目的数据库凭证 我想知道我是否可以使用示例凭证提交该文件 然后忽略它 以避免其他新的提交 这是文件 development resources db adapter PDO MYS
  • Facebook iOS SDK v 3.1.1 遇到问题

    我的应用程序现在使用适用于 iOS 的 Facebook SDK 版本 3 1 1 在 iOS6 上我注意到奇怪的行为FBSession expirationDate 日期始终设置为 4001 年 遥远的未来 我读到这可能与offline
  • Android 中的按钮列表

    我想在活动中创建一个 ImageButtons 列表 每行三个按钮 如果我用 XML 来做这个 考虑到有超过 100 个按钮 Eclipse 会抱怨有太多视图 有一个更好的方法吗 谢谢 我认为你应该动态地制作按钮 像这样 Button bt
  • 我的 vscode 的控制台输出看起来很奇怪,如何修复它?

    我正在使用 vscode 在 macOS 中编写 C 程序 但是我发现很难调试 并且控制台的输出总是格式不正确 我的代码就像 include
  • 获取magento中自定义输入的值

    首先 我在 magento 产品视图页面中创建了一个输入 如下所述 我已经做了一个观察者 所以它在添加到购物车时设置自定义价格 checkout cart product add after 事件 这是函数 public function
  • android: AbsListView.OnScrollListener SCROLL_STATE_IDLE 在 SCROLL_STATE_TOUCH_SCROLL 之后不会被调用(2.1 版)

    我的 Android 版本 2 1 有问题 它看起来像一个错误 我附上了一个OnScrollListener到我的列表查看 我正在使用该方法onScrollStateChanged AbsListView view int scrollSt
  • 在vba中编写VLOOKUP函数

    我正在尝试使用 vba 代码中的 VLOOKUP 函数在表数组中的电子表格上查找值 我不知道如何正确地写它 这是包含所有引用的普通 VLOOKUP 公式 VLOOKUP DATA AN2 DATA AA9 AF20 5 FALSE 你有没有
  • Swift 语言中的 _cmd [重复]

    这个问题在这里已经有答案了 我之前的问题被标记为重复 我尝试编辑我的问题 但无法删除重复的标签 因此我必须创建一个新标签与 cmd 等效的 swift 是什么 https stackoverflow com questions 244826
  • 类型参数中的“>>”是否使用特殊规则进行标记?

    我很困惑Java规范 http docs oracle com javase specs jls se7 html jls 3 html关于如何将此代码标记化 ArrayList