用ANTLR 4编写的以下语法解释
我有一个用ANTLR 4编写的语法示例用ANTLR 4编写的以下语法解释,antlr,grammar,antlr4,Antlr,Grammar,Antlr4,我有一个用ANTLR 4编写的语法示例 query : select from ';' !? EOF! 我明白了 query : select from ';' 工作原理 什么是!?EOF在语法中的含义及其工作方式?在ANTLR v3语法中使用感叹号表示应在生成的AST中省略某个节点。由于ANTLR v4没有AST,因此不再使用此构造 在v3和v4中,?表示规则(lexer或parser)是可选的,EOF表示文件结束常量 总结“;”表示:可以选择匹配';'并将其从AST中排除。和EOF表示:
query : select from ';' !? EOF!
我明白了
query : select from ';'
工作原理
什么是
!?EOF
在语法中的含义及其工作方式?在ANTLR v3语法中使用感叹号表示应在生成的AST中省略某个节点。由于ANTLR v4没有AST,因此不再使用此构造
在v3和v4中,?
表示规则(lexer或parser)是可选的,EOF
表示文件结束常量
总结“;”代码>表示:可以选择匹配';'代码>并将其从AST中排除。和EOF代码>表示:匹配文件结尾并从AST中排除此标记
因此,v3解析器规则:
query : select from ';'!? EOF!
在v4语法中应该是这样的:
query : select from ';'? EOF
感叹号在ANTLR v3语法中用于表示应该从生成的AST中省略某个节点。由于ANTLR v4没有AST,因此不再使用此构造
在v3和v4中,?
表示规则(lexer或parser)是可选的,EOF
表示文件结束常量
总结“;”代码>表示:可以选择匹配';'代码>并将其从AST中排除。和EOF代码>表示:匹配文件结尾并从AST中排除此标记
因此,v3解析器规则:
query : select from ';'!? EOF!
在v4语法中应该是这样的:
query : select from ';'? EOF
EOF表示文件结束,如果这也是您所要求的。EOF表示文件结束,如果这也是您所要求的。如果“?”是可选的,那么它应该执行不带“;”的查询。我说得对吗?例如:如果我执行查询('selectcolumn1fromtable1'),我会得到一个错误。我只有在插入“;”时才得到结果在查询的末尾('从表1中选择COLUMN1;')。我读到的“?”的解释是?这意味着运算符左侧的符号(或括号中的一组符号)是可选的(它可以显示零次或一次)。所以定义说它甚至可以出现零次。在这种情况下,如果我上面的查询没有“;”我应该知道结果。对吗?那么如果我的查询没有“;”为什么我得不到结果呢@USER 2085 189,我解释了角色的意思(所以我认为这个问题需要回答)。如果您收到错误消息,我建议您打开一个新问题,并准确解释错误消息是什么以及您如何运行测试。好的!谢谢你的回复。我会这样做。如果“?”是可选的,那么它应该执行不带“;”的查询。我说得对吗?例如:如果我执行查询('selectcolumn1fromtable1'),我会得到一个错误。我只有在插入“;”时才得到结果在查询的末尾('从表1中选择COLUMN1;')。我读到的“?”的解释是?这意味着运算符左侧的符号(或括号中的一组符号)是可选的(它可以显示零次或一次)。所以定义说它甚至可以出现零次。在这种情况下,如果我上面的查询没有“;”我应该知道结果。对吗?那么如果我的查询没有“;”为什么我得不到结果呢@USER 2085 189,我解释了角色的意思(所以我认为这个问题需要回答)。如果您收到错误消息,我建议您打开一个新问题,并准确解释错误消息是什么以及您如何运行测试。好的!谢谢你的回复。我会的。