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