Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
用ANTLR 4编写的以下语法解释_Antlr_Grammar_Antlr4 - Fatal编程技术网

用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表示:

我有一个用ANTLR 4编写的语法示例

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,我解释了角色的意思(所以我认为这个问题需要回答)。如果您收到错误消息,我建议您打开一个新问题,并准确解释错误消息是什么以及您如何运行测试。好的!谢谢你的回复。我会的。