如果我只想检查一种语言的语法是否正确, 使用yacc编写语法分析器的简便方法是什么。
答案 0 :(得分:1)
请注意,EBNF的ISO标准是ISO 14977:1996,您在问题中使用的'EBNF'与标准版本的相似性有限。这使我们不得不解释你的语法规则。
考虑到这些定义,您需要:
假设:
%token DECLARATION
%token OF
%token CONST
%token VAR
%token END
%%
declaration_unit
: DECLARATION OF ident opt_const_declaration opt_var_declaration
opt_procedure_interface opt_function_interface DECLARATION END
;
opt_const_declaration
: /* Nothing */
| CONST const_declaration
;
opt_var_declaration
: /* Nothing */
| VAR var_declaration
;
opt_procedure_interface
: /* Nothing */
| procedure_interface
;
opt_function_interface
: /* Nothing */
| function_interface
;
您现在只需填写ident
,const_declaration
,var_declaration
,procedure_interface
,function_interface
的规则。
对于简单的语法检查,您可以为尚未完全定义的语法部分添加占位符标记和规则。例如,您可以添加:
%token IDENT
%token CONST_DECLARATION
%token VAR_DECLARATION
%token PROCEDURE_INTERFACE
%token FUNCTION_INTERFACE
和
ident
: IDENT
;
const_declaration
: CONST_DECLARATION
;
var_declaration
: VAR_DECLARATION
;
procedure_interface
: PROCEDURE_INTERFACE
;
function_interface
: FUNCTION_INTERFACE
;
您的词法分析器只需能够可靠地识别这些虚拟标记,直到您提供正确的规则。