Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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
C++ 在EBNF或GNU Bison语法中使用括号/括号_C++_Parsing_Syntax_Grammar_Bison - Fatal编程技术网

C++ 在EBNF或GNU Bison语法中使用括号/括号

C++ 在EBNF或GNU Bison语法中使用括号/括号,c++,parsing,syntax,grammar,bison,C++,Parsing,Syntax,Grammar,Bison,我正在为输出C/C++代码的解析器生成器定义自己的语法。为此我选择了野牛,但遇到了一个问题。我想在规则中使用括号(“(”,”),但Bison不接受它们例如,声明我使用的字符(三个点代替所有其他可能的ASCII字符): 正如你们所看到的,我用括号表示一个字符必须有一个引号,任何字符,然后是另一个引号 我对整数执行类似的操作: integer: (["-"] digits) | "0"; 有没有办法在野牛身上实现类似的目标?或者,是否存在一个接受EBNF的分析器生成器,甚至只是括号,输出C++代码

我正在为输出C/C++代码的解析器生成器定义自己的语法。为此我选择了野牛,但遇到了一个问题。我想在规则中使用括号(“(”,”),但Bison不接受它们例如,声明我使用的字符(三个点代替所有其他可能的ASCII字符):

正如你们所看到的,我用括号表示一个字符必须有一个引号,任何字符,然后是另一个引号

我对整数执行类似的操作:

integer: (["-"] digits) | "0";

有没有办法在野牛身上实现类似的目标?或者,是否存在一个接受EBNF的分析器生成器,甚至只是括号,输出C++代码?

BySon不支持EBNF,只支持BNF,所以如果您想要可选的或分组的东西,您必须自己编写规则:

character: '\'' character_char '\''
character_char: '\0' | '\t' | ...

integer: opt_negate digits | '0'
opt_negate: | '-'
另外,请注意bison中的
字符不表示文字,因此不会做您想做的事情(通常是无用的,因为您无法在lexer中轻松引用它们)。始终使用
——单引号——表示文字


此外,正则表达式可以识别的任何内容(如以下示例),可能应该在lexer中被识别,并作为单个标记返回bison解析器——它更简单、更清晰、更高效。

bison不支持EBNF,只支持BNF,因此如果您想要可选或分组的东西,您必须自己编写规则:

character: '\'' character_char '\''
character_char: '\0' | '\t' | ...

integer: opt_negate digits | '0'
opt_negate: | '-'
另外,请注意,
bison中的字符不表示文字,因此不会做您想做的事情(并且通常是无用的,因为您无法在lexer中轻松引用它们)。始终使用
——单引号——表示文字


此外,任何可以被正则表达式识别的内容(如这些示例)都应该在lexer中识别,并作为单个标记返回给bison解析器——它更简单、更清晰、更高效。

通常,词法分析应该在flex中完成。通常,词法分析应该在flex中完成