Mat*_*ick 12 java parsing token
我对Java规范应该如何标记这个代码感到困惑:
ArrayList<ArrayList<Integer>> i;
Run Code Online (Sandbox Code Playgroud)
规范说:
每个步骤都使用尽可能长的翻译,即使结果最终没有形成正确的程序而另一个词汇翻译也会如此.
据我了解,应用"最长匹配"规则会产生令牌:
哪个不会解析.但当然这个代码解析得很好.
这种情况的正确规范是什么?
这是否意味着正确的词法分析器必须无上下文?使用常规词法分析器似乎不可能.
根据阅读@sm4 链接的代码,策略看起来是:
正常地标记输入。因此A<B<C>> i;
将被标记为A, <, B, <, C, >>, i, ;
——8 个标记,而不是 9 个。
在分层解析期间,当解析泛型并且>
需要 a 时,如果下一个标记以>
-- >>
、>>>
、>=
、>>=
或>>>=
-- 开头,只需>
将缩短的标记推回标记流即可。示例:当解析器>>, i, ;
在处理 typeArguments 规则时到达,它成功解析了 typeArguments,并且剩余的令牌流现在略有不同>, i, ;
,因为第一个>
被拉>>
下来以匹配 typeArguments。
因此,尽管标记化确实正常发生,但如有必要,在分层解析阶段会发生一些重新标记化。
归档时间: |
|
查看次数: |
213 次 |
最近记录: |