例如,如何在lexer
中找到上一个/左标记
lexer grammar TLexer;
ID : [a-zA-Z] [a-zA-Z0-9]*;
CARET : '^';
RTN : {someCond1}? CARET ID; // CARET not include this token
GLB : {someCond2}? CARET ID; // CARET not include this token
等
我看了一下Lexer源代码。Lexer响应nextToken()调用(来自解析器)。我没有发现它跟踪以前的标记。并且无法直接访问CARET。给定此输入:
xyz ^abc
这个语法:
lexer grammar TLexer;
ID : [a-zA-Z] [a-zA-Z0-9]* {System.out.println("ID ");} ;
CARET : '^' {System.out.println("CARET ");} ;
WS : [ \r\n] ;
RTN : CARET ID {System.out.println("RTN " + _tokenStartCharIndex);} ;
输出为:
$ antlr4 TLexer.g4
$ javac TLexer.java
$ grun TLexer tokens -tokens -diagnostics -trace input.txt
ID
RTN 4
[@0,0:2='xyz',<1>,1:0]
[@1,3:3=' ',<3>,1:3]
[@2,4:7='^abc',<4>,1:4]
[@3,8:8='\n',<3>,1:8]
[@4,9:8='<EOF>',<-1>,2:9]
lexer为您提供一个类型为
谢谢,我是这样做的
lexer grammar TLexer;
@lexer::members {
int lastTokenType = 0;
public void emit(Token token) {
super.emit(token);
lastTokenType = token.getType();
}
}
CARET : '^';
RTN : {someCond1&&(lastTokenType==CARET)}? ID;
GLB : {someCond2&&(lastTokenType==CARET)}? ID;
ID : [a-zA-Z] [a-zA-Z0-9]*;
null 显然,我可以尝试在lexer语法中以以下方式解决这个问题: 但它也将包含结束标记,解析器语法更难看。 (加分题: 如何在中正确捕获空格,但可能需要使用lexer模式; 如何避免和其他lexer定义的干扰。)
在HashMap中,我可以使用containsKey(i)或containsValue(i)来检查我是否被使用;对数组也可以这样做吗?我的意思是检查myarray i1中的值是否为z i1==myarray中每个数组的第一个元素的组 在我的例子中{1,3,0,2}
问题内容: 我已经搜索过,但是找不到任何简单,直接的答案。如何检查ANALYZE当前使用的统计目标? 问题答案: 统计目标的设置存储在目录表中的每一列中。您可以这样设置: 并像这样检查它: 或者,您只需在pgAdmin的对象浏览器中查看创建脚本,如果该值与中的默认值不同,则会在该脚本中附加创建脚本。 我引用以下手册: attstattarget控制由累积的该列统计信息的详细程度。零值表示不应收集统
问题内容: 我有一组表,需要定期删除一些行并插入其他表来进行维护。其中一些表具有引用其他表的外键约束,因此这意味着表加载顺序很重要。要插入新行而不用担心表的顺序,我使用: 之前,然后: 后。 加载完成后,我想检查更新后的表中的数据是否仍具有参照完整性-新行不会破坏外键约束-但似乎没有办法做到这一点。 作为测试,我输入了肯定违反外键约束的数据,并且在重新启用外键检查后,mysql没有产生警告或错误。
问题内容: 我有两个arraylist 我想检查a2中是否存在a1的所有元素。这是我正在尝试的问题 这没有给出一致的结果…还有其他方法可以做到吗? 问题答案: 不知道我是否正确理解了您的问题,为什么使用? 试过这个: 它输出 添加一个额外的元素将使它失败(如预期): 它输出
我需要检查一个arraylist中的任何值是否存在于另一个arraylist中: 它打印“它不包含”。我需要知道是否有方法比较这两个arraylist,如果其他arraylist中存在任何值,它应该返回。我知道迭代可以有所帮助。有什么简单的方法可以做到这一点吗?