如何编写规则:“;除了”;在ANTLR4中?
我想要的是ID不能是“INT”或“FLOAT”如何编写规则:“;除了”;在ANTLR4中?,antlr4,lexer,except,Antlr4,Lexer,Except,我想要的是ID不能是“INT”或“FLOAT” 我该怎么办??谢谢 (很抱歉我的英语不好)只需移动INT\u LIT和FLOAT规则高于ID。当两条规则匹配同一文本时,第一条规则获胜。也就是说,通过此设置,“INT”将始终是INT\u点亮的,而不是ID。INT\u点亮:“INT”FLOAT:“FLOAT”ID:(['a-zA-Z])(['a-zA-Z0-9])*你的意思是像这样???谢谢。谢谢@doublepOne更多问题。我想定义一个以“a”开头和结尾的标记。也在中间,它不能是“BC”。所以我
我该怎么办??谢谢
(很抱歉我的英语不好)只需移动
INT\u LIT
和FLOAT
规则高于ID
。当两条规则匹配同一文本时,第一条规则获胜。也就是说,通过此设置,“INT”将始终是INT\u点亮的
,而不是ID
。INT\u点亮:“INT”代码>FLOAT:“FLOAT”代码>ID:(['a-zA-Z])(['a-zA-Z0-9])*代码>你的意思是像这样???谢谢。谢谢@doublepOne更多问题。我想定义一个以“a”开头和结尾的标记。也在中间,它不能是“BC”。所以我写了MYTOKEN:'a'~('bc')*'a'
,但它不起作用。它说:“lexer集合中不允许使用多字符文字”。你能帮我吗???语法规则不是完整的正则表达式,你不能用它们做太复杂的事情。您可能需要研究规则操作和谓词。或者事后验证令牌。还有一个想法:在上面的一些规则中包含带有“bc”的内容MYTOKEN
:那么这个规则将永远不会将令牌与“bc”匹配。
ID: (['_'a-zA-Z])(['_'a-zA-Z0-9])*;
INT_LIT: 'INT';
FLOAT: 'FLOAT';