栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Antlr:初学者的输入期望ID不匹配

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Antlr:初学者的输入期望ID不匹配

由于ID和STRING都可以匹配以“ driver”开头的输入文本,因此,即使ID规则排在最前面,词法分析器也会选择最长的匹配项。

因此,您在这里有几种选择。最直接的方法是通过要求字符串以等号开头来消除ID和STRING之间的歧义(这是替代方法的工作方式)。

file : prop+ EOF ;prop : ID STRING newline ;ID      : [a-zA-Z]+ ;STRING  : '=' (~[rn])+;newline : 'r'?'n' ;

然后,您可以使用操作从字符串标记的文本中修剪等号。

或者,您可以使用谓词消除规则的歧义。

file : prop+ EOF ;prop : ID '=' STRING newline ;ID      : [a-zA-Z]+ ;STRING  : { isValue() }? (~[rn])+; newline : 'r'?'n' ;

其中,isValue方法在字符流上向后看以验证其是否跟随等号。就像是:

@members {public boolean isValue() {    int offset = _tokenStartCharIndex;    for (int idx = offset-1; idx >=0; idx--) {        String s = _input.getText(Interval.of(idx, idx));        if (Character.isWhitespace(s.charAt(0))) { continue;        } else if (s.charAt(0) == '=') { return true;        } else { break;        }    }    return false;}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号