根据阅读@sm4链接的代码,看起来策略是:
正常标记化输入。因此,将被标记为 - 8个令牌,而不是9个。
A<B<C>> i;
A, <, B, <, C, >>, i, ;
在分层解析期间,当需要解析泛型和 a 时,如果下一个令牌以 -- , , , , 或 - 只需敲掉并把缩短的令牌推回令牌流。示例:当解析器在处理 typeArguments 规则时到达时,它成功解析 typeArguments,并且剩余的令牌流现在略有不同,因为第一个令牌流被拉出以匹配 typeArguments。
>
>
>>
>>>
>=
>>=
>>>=
>
>>, i, ;
>, i, ;
>
>>
因此,尽管标记化确实正常发生,但如有必要,在分层分析阶段会发生一些重新标记化。
Java 10 语言规范(3.2 词法翻译)指出:
在每一步都使用尽可能长的翻译,即使结果最终没有做出正确的程序,而另一个词法翻译会。有一个例外:如果在类型上下文中发生词法转换 (§4.11),并且输入流具有两个或多个连续的>字符,后跟一个非>字符,则必须将每个>字符转换为数字比较运算符>的令牌。
输入字符 a--b 被标记化 (§3.5) 为 a、--, b,这不是任何语法正确程序的一部分,即使标记化 a、-, -, b 可能是语法正确程序的一部分。
如果没有>字符的规则,List<List<String>>
中的两个连续>括号将被标记化为>>的有符号右移位运算符,而 List<List<List<String>>>
等类型中的三个连续>括号将被标记为无符号右移位运算符>>>。更糟糕的是,在 List<List<List<List<String>>>>
等类型中对四个或多个连续>括号进行标记化将是模棱两可的,因为>、>>和>>>标记的各种组合可以表示>>>>字符。
C++的早期版本显然也遭受了这种情况的影响,因此在两个相邻的小于(<)和大于(>)符号之间至少需要一个空格,例如.幸运的是,没有了。vector <vector<int> >
-
Jackson - 递归解析成 Map<String, Object> 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上正在使用一个来存储它。hat 方式可以是值 () 或新节点 ()。 如何简化此代码?递归函数会很好。
-
-
如何轻松处理CSV文件到List<MyClass> 在我的应用程序中,我使用了很多CSV文件,我必须阅读这些文件并基于它们构建列表。我想找到一个简单的方法来做到这一点。您知道任何简单的框架在不使用配置文件等数量的情况下做到这一
-
使用 Gson 的自定义 JSON 反序列化程序 我在使用Gson解析JSON响应时遇到问题。 JSON 字符串: 但是当我使用Gson解析它时,我有一个异常。我知道这是因为响应数组第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决
-
Java - 十进制格式.parse 返回具有指定小数位数的双精度值 我希望能够在格式字符串中给定一个小数位数的情况下将字符串转换为Double。所以“###,##0.000”应该给我一个双到3位小数。 编辑 - 添加了有关所发生情况的更多信息 用户在 UI 中输入值 - 该值