Estou com um problema com minha gramática PEG em PHP que usa php-peg (o projeto tem um fork mais recente que é publicado no packagist). Meu projeto é uma bifurcação de um analisador de expressão que desejo substituir por um analisador gerado que seja muito mais fácil de modificar.
Tudo funciona bem até agora, mas tenho problemas para adicionar multiplicação implícita que faz parte dos recursos originais do projeto.
Se parece com isso:
8(5/2)
deveria multiplicar implicitamente 8 pela fração.
Minha gramática até agora tem muitos recursos, mas eu só quero saber como adicionar multiplicação implícita a um exemplo básico de calculadora parecido com este:
Number: /[0-9]+/
Value: Number > | '(' > Expr > ')' >
function Number( &$result, $sub ) {
$result['val'] = $sub['text'] ;
}
function Expr( &$result, $sub ) {
$result['val'] = $sub['val'] ;
}
Times: '*' > operand:Value >
Div: '/' > operand:Value >
Product: Value > ( Times | Div ) *
function Value( &$result, $sub ) {
$result['val'] = $sub['val'] ;
}
function Times( &$result, $sub ) {
$result['val'] *= $sub['operand']['val'] ;
}
function Div( &$result, $sub ) {
$result['val'] /= $sub['operand']['val'] ;
}
Plus: '+' > operand:Product >
Minus: '-' > operand:Product >
Sum: Product > ( Plus | Minus ) *
function Product( &$result, $sub ) {
$result['val'] = $sub['val'] ;
}
function Plus( &$result, $sub ) {
$result['val'] += $sub['operand']['val'] ;
}
function Minus( &$result, $sub ) {
$result['val'] -= $sub['operand']['val'] ;
}
Expr: Sum
function Sum( &$result, $sub ) {
$result['val'] = $sub['val'] ;
}
Localizado no diretório de exemplos de projetos .
Criei um projeto de exemplo de calculadora básica no GitHub.
Eu tentaria mudar a
Product
regra para esta: