Skip to content

Commit

Permalink
first steps for evaluator
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippImhof committed Mar 29, 2023
1 parent 4fafdf9 commit b994077
Show file tree
Hide file tree
Showing 7 changed files with 935 additions and 29 deletions.
55 changes: 55 additions & 0 deletions classes/answer_parser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

namespace qtype_formulas;

/**
* Parser for answer expressions for qtype_formulas
*
* @package qtype_formulas
* @copyright 2022 Philipp Imhof
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/


class answer_parser extends parser {
/**
* FIXME Undocumented function
*
* @param [type] $tokenlist
* @param [type] $knownvariables
*/
public function __construct(array $tokenlist, array $knownvariables = []) {
// FIXME: add parameter for answer type (number, numeric, numerical formula, algebraic formula)

// When parsing an answer expression, we have to replace all ^ operators (XOR) by
// ** operators (exponentiation) in order to maintain backwards compatibility.
foreach ($tokenlist as $token) {
if ($token->type === token::OPERATOR && $token->value === '^') {
$token->value = '**';
}
}

// FIXME: add some filtering, according to answer type, e.g.
// * number (no operators and stuff at all, except for unary -)
// * numeric (allow +, -, *, /, ** or ^, parens and pi)
// * numerical formula (allow some functions; cf. func_algebraic in legacy variables.php)
// * algebraic formula (allow everything, but with ^ still being **)

// Once this is done, we can parse the expression normally.
parent::__construct($tokenlist);
}
}
Loading

0 comments on commit b994077

Please sign in to comment.