论坛首页 综合技术论坛

Oracle的ora文件的BNF

浏览 1793 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-16  

工作中经常会用到oracle中的ora文件,比如tnsnames.ora等,看的多了,就像整理出ora的BNF定义。以前整理过一些BNF,用lex/yacc或者javacc可以很快的做出一个简单的解释器,所以对这些东西很感兴趣。好了,我们来看看ora的BNF吧:

 

config : ( parameter )*;

parameter : keyword EQ 
			( value 
			| '(' value_list ')' 
			| ( '(' parameter ')' )+
			);

keyword : WORD;

value : WORD | QSTRING;

value_list : value ( COMMA value )*;

QSTRING : \' [~\']* \'
		| \" [~\"]* \";

WORD : [a-zA-Z0-9];
COMMENT : '#' [~\n]*;
WHITESPACE : [\t ]+;

 

当然,这个只是简单的BNF,做成解释器还需要加入相应的动作解释。

仔细看了看自己的blog,发现之前也整理过类似的定义,比如:Lisp的BNF,还有dot语言的BNF。只有dot的做了一部分,Lisp的根本没有做,需要抽时间专门做一下,不然自己的手也生了。其实,如果掌握了正则表达式和上下文无关文法这两个部分,借助lex/yacc,javacc/anltr等工具很容易做出来,不过时间长了又忘了。

论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics