0
如果我只是想檢查一種語言的語法是否正確,使用yacc編寫語法分析器的簡便方法是什麼? Lex和Yacc和EBNF規範
如果我只是想檢查一種語言的語法是否正確,使用yacc編寫語法分析器的簡便方法是什麼? Lex和Yacc和EBNF規範
請注意,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
;
你的詞法分析器只是需要能夠直到您提供正確的規則,以可靠地識別這些假的憑證。
您的'EBNF'與ISO 14977:1996定義的EBNF不太相似。 – 2014-10-01 02:52:27