php中的EBNF解析器

时间:2013-05-02 17:08:21

标签: php ebnf

我想在php 中使用任何内置的php函数(如preg_match)实现EBNF解析器。我想制作四个函数expr(),term(),factor()和digit()以及一个匹配标记的函数。 但我不明白怎么写它。我一直尝试但它仍然没有用。

EBNF

EXP ::= TERM {(+ | -) TERM}

TERM ::= FACTOR {(* | /) FACTOR}

FACTOR ::= (EXP) | DIGIT

DIGIT ::= 0 | 1 | 2 | 3    
有人可以帮我写一下吗? 我真的很感激。

非常感谢。

编辑:

这是我在PHP中实现它的递归式识别器(伪代码)。

程序开始

Exp( )

if token < >$      /* blank ended with $ then error */

error;

程序Exp

Term()

while(token =='+'|| token ==' - ')

{

if token = = ‘+’

        match (‘+’)

        Term ( )

else if token = = ‘-’

        match (‘-’)

        Term ( )

else if token = = ‘$’

    Success...!!!       

else 

    error( ); 

}

程序期限

Factor( )

while(token =='*'|| token =='/')

{

if token = = ‘*’

        match (‘*’)

        Factor ( )

else if token = = ‘/’

        match (‘/’)

        Factor ( )

else 

        error( );

}

程序因素

数字()

while(token =='(')

{     if token = ='('

    match(‘(’)

    Exp( );

    if token=(‘)’)

        match(‘)’) ;

else

    error( ); 

}

程序数字

if token in {0,1,2,3}
    match (token)
else 
    error ( )

程序匹配(t)

if token = = t

         token = next token -- - - - ------------- advanced pointer

    else
    error( )

程序错误

Print (“Error......”);

0 个答案:

没有答案