Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写规则:“;除了”;在ANTLR4中?_Antlr4_Lexer_Except - Fatal编程技术网

如何编写规则:“;除了”;在ANTLR4中?

如何编写规则:“;除了”;在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”。所以我

我想要的是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”。所以我写了
MYTOKEN:'a'~('bc')*'a'
,但它不起作用。它说:“lexer集合中不允许使用多字符文字”。你能帮我吗???语法规则不是完整的正则表达式,你不能用它们做太复杂的事情。您可能需要研究规则操作和谓词。或者事后验证令牌。还有一个想法:在上面的一些规则中包含带有“bc”的内容
MYTOKEN
:那么这个规则将永远不会将令牌与“bc”匹配。
ID: (['_'a-zA-Z])(['_'a-zA-Z0-9])*;
INT_LIT: 'INT';
FLOAT: 'FLOAT';