# Copyright (C) 2006-2007, The Perl Foundation. # $Id: Plumhead.pg 23414 2007-12-03 19:08:23Z bernhard $ # PHP grammar for Plumhead partrige # The starting rule is TOP grammar Plumhead::Grammar is PCT::Grammar; token TOP { } regex SEA { <-[<]>+? ( | $ ) } regex SEA_empty_allowed { <-[<]>*? } token CODE_START { '' \n? } token DOUBLEQUOTE_STRING { '"' '"' } token SINGLEQUOTE_STRING { \' \' } token ECHO { 'echo' } token VAR_DUMP { 'var_dump' } token PHP_SAPI_NAME { 'php_sapi_name' } token PAREN_OPEN { \( } token PAREN_CLOSE { \) } token IDENT { ( <[a..z]> | <[A..Z]> | '_' )( <[a..z]> | <[A..Z]> | '_' )* } token VAR_NAME { '$' } token INTEGER { \d+ } token NUMBER { ( \d+ )? '.' \d+ } token UNARY_MINUS { \- } token UNARY_PLUS { \+ } token CONCAT_OP { \. } token ADD_OP { \+ | \- } token MUL_OP { '*' | '/' | '%' } token BITWISE_OP { '|' | '&' | '^' } token ASSIGN_OP { '=' } token REL_OP { '==' | '<=' | '>=' | '!=' | '<' | '>' } token IF { 'if' } token ELSE { 'else' } token program { ^ + } token sea_or_code { | } rule code { * ? } rule relational_expression { ? } rule statement { ( | ) ( ';' | | $ ) | ( ';' | | $ ) | \{ * \} ? | | | } rule else_clause { \{ * \} } # TODO: rel_op_clause is not a nice name rule rel_op_clause { } rule else_clause { \{ * \} } token inline_sea { } rule scalar_assign { ( ';' | | $ ) } rule array_assign { ( ';' | | $ ) } token expression { | } rule array_elem { '[' ']' } rule array_key { } rule var { } rule concat_expression { * } rule string { | } rule concat_tail { } rule bitwise_expression { ? } rule bitwise_tail { } # BUG: this gets precedence wrong rule adding_expression { * } rule adding_tail { } # TODO: this gets precedence wrong, see adding_expression rule multiplying_expression { ? } rule multiplicand { } rule unary_expression { ? } rule postfix_expression { | | | | }