/** * Module containing the options for parsing PHP sources. * The main strategy to use the options is 'parse-php-options' * * Each options comes with strategies used to retrieve the configuration * setting. Some of them have default values which are defined in this * module. * * @author Eric Bouwers */ module php/parse/options /** * Parse the options that are available within the tool. These are: * - Set a specific release (4,5) * - Set a specific start-symbol (Document,TopStatement,Statement,Expr) * - Indicate wheter to preserve the comments as annotations * - Indicate wheter to preserve the positions as annotations */ strategies /** * Processes the options for PHP. Separate strategy because the parsing * can be done on several sources. * * @type AST -> AST */ process-parse-php-options = if must-preserve-comments then asfix-anno-comments(|["Comment"]) end ; if must-preserve-positions then asfix-anno-position-info(|<get-current-php-file>) end ; implode-asfix ; post-process-structures /** * Strategy combining the several parse-options */ parse-php-options = release-options + symbol-option + preserve-comments-option + preserve-positions-option + include-path-option /** * Strategy combining several include-file options */ include-file-options = include-file-simple-option + include-file-complex-option + print-included-files-option /** * Utility strategies for the default options available * fromi Stratego. */ strategies /** * Get's the input path of the current tool. This means that it * tries to read a config-setting or uses standard-input. * * @type _ -> path */ get-input-path = <get-config> "-i" <+ !"stdin" /** * Option to set the release. Either PHP version 4 and 5. */ strategies release-options = ArgOption("-r" + "--release" ,set-release-option ,!HelpString("-r | --release r", "Use a specific release, either 4 or 5. [4]") ) set-release-option = where( switch id case "4" : !"PHP4" case "5" : !"PHP5" otherwise : <fprint> (<stderr-stream>, ["parse-php: parsing for version ", <id>, " is not supported.\n"]) end ; <set-config> ("version",<id>) ) /** * Choice between two strategies based on the * current PHP version */ php-choose-version(s4,s5) = if <eq> (<get-config> "version","PHP5") then s4 else s5 end /** * Option to set the startsymbol. * This can be Document, TopStatement, Statement and Expr for now */ strategies symbol-option = ArgOption("-s" + "--start-symbol" , set-start-symbol , !HelpString("-s|--start-symbol s", "Start parsing with symbol s [Document]") ) set-start-symbol = <set-config> ("start-symbol", <id>) get-start-symbol = <get-config> "start-symbol" <+ !"Document" /** * Option to keep the comments as annotations. Is * used in the parsing to add an exra tool to the pipe-line * if wanted. */ strategies preserve-comments-option = Option("--preserve-comments" , <set-preserve-comments> "yes" , !HelpString("--preserve-comments", "Preserve source code comments as annotations of the abstract syntax tree. [off]") ) set-preserve-comments = <set-config> ("preserve-comments", <id>) must-preserve-comments = <get-config> "preserve-comments" => "yes" /** * Option to keep the positions as annotations. Is * used in the parsing to add an exra tool to the pipe-line * if wanted. */ strategies preserve-positions-option = Option("--preserve-positions" , <set-preserve-positions> "yes" , !HelpString("--preserve-positions", "Preserve source code positions in the input file as annotations of the abstract syntax tree. [off]") ) set-preserve-positions = <set-config> ("preserve-positions", <id>) must-preserve-positions = <get-config> "preserve-positions" => "yes" /** * Option to set the include path. * */ strategies include-path-option = ArgOption("--include-path" ,set-php-include-path ,!HelpString("--include-path path1(:path2:..)" , "Set the include path using a list of directories separated with a colon [.]") ) /** * Sets the include path of the current process. * * @type String -> String */ set-php-include-path = <set-config> ("php-include-path",<id>) /** * Returns the current include path. The default include path * is '.' * * @type _ -> String */ get-php-include-path = <get-config> "php-include-path" <+ !"." /** * Options for including files */ strategies /** * Include file simple option. * This option enables the simple inclusion. Including * all files with exact strings. */ strategies include-file-simple-option = Option("--simple-inclusion" , <set-include-file-simple> "yes" , !HelpString("--simple-inclusion", "Include files in a simple matter. [off]") ) set-include-file-simple = <set-config> ("include-file-simple", <id>) include-file-simple = <get-config> "include-file-simple" => "yes" /** * Include file complex option. * This option enables the complex inclusion. Including * all files that can be found with the use of constant propagation */ strategies include-file-complex-option = Option("--complex-inclusion" , <set-include-file-complex> "yes" , !HelpString("--complex-inclusion", "Include files using constant propogation. [off]") ) set-include-file-complex = <set-config> ("include-file-complex", <id>) include-file-complex = <get-config> "include-file-complex" => "yes" /** * Print included files option * Enables the printing of included files. */ strategies print-included-files-option = Option("--print-included-files" , <set-print-included-files> "yes" , !HelpString("--print-included-files", "Print the files that are included [off]") ) set-print-included-files = <set-config> ("print-included-files", <id>) should-print-included-files = <get-config> "print-included-files" => "yes"