/**
* Module containing information and strategies to
* find/open the parse-table to use.
*
* @author Eric Bouwers
*/
module php/parse/tables
strategies
/**
* Opens the right parse table for parsing PHP sources.
*/
php-open-parse-table =
php-open-parse-table(php-front-find-table)
/**
* Uses the given strategy to find the parse that should be
* opened. Will memorize the parse table that it opens.
*
* @type String -> OpenParseTable
*/
php-open-parse-table(finder) =
PhpMemoParseTable
<+ ?path
; finder
; tbl := <open-parse-table>
; rules(PhpMemoParseTable : path -> tbl)
/**
* Will find tha parse table that is needed in order to
* parse the given start-symbol.
*
* @param String The symbol to parse
* @type _ -> String
*/
get-parse-table(|symbol) =
get-base-part => base
; get-table-extension(|symbol) => ext
; <conc-strings> (base, ext)
; log(|Debug(), "Using parse table", <id>)
/**
* Constructs the base-part of the parse table to find
* based on the version to parse.
*
* @type _ -> String
*/
get-base-part =
OverrideParseTable
<+ <get-config> "version"
<+ !"PHP4"
/**
* Constructs the extensions based on the start-symbol to
* parse. The extension will be nothing or 'Test'.
*
* @strategy _ -> String
*/
get-table-extension(|symbol) =
if !symbol => "Document"
then !".tbl"
else !"Test.tbl"
end
/**
* Forces a strategy to be evaluated under the assumption of
* PHP version 4.
*/
using-php4(s) =
{| OverrideParseTable :
rules(OverrideParseTable : _ -> "PHP4")
; s
|}
/**
* Forces a strategy to be evaluated under the assumption of
* PHP version 5.
*/
using-php5(s) =
{| OverrideParseTable :
rules(OverrideParseTable : _ -> "PHP5")
; s
|}