Difference between revisions of "Specialized parsers"

From WeBWorK_wiki
Jump to navigation Jump to search
Line 7: Line 7:
 
=== Specialized Parser Macro files ===
 
=== Specialized Parser Macro files ===
 
Here is a partial list of the parser modifying files.
 
Here is a partial list of the parser modifying files.
Check the [http://webwork.maa.org/doc/cvs/pg_CURRENT/ POD documentation for more examples.]
+
Check the [http://webwork.maa.org/pod/pg_TRUNK/ POD documentation for more examples.]
 
Use <code>loadMacros("parserAssignment.pl");</code> to make the parser modifications available for a WeBWorK question.
 
Use <code>loadMacros("parserAssignment.pl");</code> to make the parser modifications available for a WeBWorK question.
   
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserAssignment.pl parserAssignment.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserAssignment.pl parserAssignment.pl]
 
** checks answers of the form <math>y=3x+5</math> with the LHS of the equation required.
 
** checks answers of the form <math>y=3x+5</math> with the LHS of the equation required.
 
** follow the link above to see the additional statements that must be inserted in the question to use this file.
 
** follow the link above to see the additional statements that must be inserted in the question to use this file.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserAutoStrings.pl parserAutoStrings.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserAutoStrings.pl parserAutoStrings.pl]
 
** <code>parserAutoStrings.pl</code> - Force String() to accept any string as a potential answer.
 
** <code>parserAutoStrings.pl</code> - Force String() to accept any string as a potential answer.
 
AutoStrings()
 
AutoStrings()
Line 20: Line 20:
 
DefineStrings(qw(string1 string2))
 
DefineStrings(qw(string1 string2))
 
-- is a quick way to define "legitimate" strings.
 
-- is a quick way to define "legitimate" strings.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserCustomization.pl parserCustomization.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserCustomization.pl parserCustomization.pl]
 
** Placeholder for site/course-local customization file.
 
** Placeholder for site/course-local customization file.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserDifferenceQuotient.pl parserDifferenceQuotient.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserDifferenceQuotient.pl parserDifferenceQuotient.pl]
 
** An answer checker for difference quotients.
 
** An answer checker for difference quotients.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserFormulaUpToConstant.pl parserFormulaUpToConstant.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserFormulaUpToConstant.pl parserFormulaUpToConstant.pl]
 
** implements formulas ``plus a constant''.
 
** implements formulas ``plus a constant''.
 
** Students must include the ``+C'' as part of their answers
 
** Students must include the ``+C'' as part of their answers
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserFormulaWithUnits.pl parserFormulaWithUnits.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserFormulaWithUnits.pl parserFormulaWithUnits.pl]
 
** Implements a formula with units.
 
** Implements a formula with units.
 
** For example:
 
** For example:
 
FormulaWithUnits("3x+1 ft")->cmp
 
FormulaWithUnits("3x+1 ft")->cmp
 
FormulaWithUnits($a*$x+1,"ft")->cmp
 
FormulaWithUnits($a*$x+1,"ft")->cmp
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserFunction.pl parserFunction.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserFunction.pl parserFunction.pl]
 
** An easy way of adding new functions to the current context.
 
** An easy way of adding new functions to the current context.
 
** <code>parserFunction("f(x)" => "sqrt(x+1)-2");</code>
 
** <code>parserFunction("f(x)" => "sqrt(x+1)-2");</code>
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserImplicitEquation.pl parserImplicitEquation.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserImplicitEquation.pl parserImplicitEquation.pl]
 
** An answer checker for implicit equations.
 
** An answer checker for implicit equations.
 
Context("ImplicitEquation");
 
Context("ImplicitEquation");
Line 41: Line 41:
 
$f = ImplicitEquation("x^2 - 2y^2 = 5",limits=>[[-3,3],[-2,2]]);
 
$f = ImplicitEquation("x^2 - 2y^2 = 5",limits=>[[-3,3],[-2,2]]);
 
$f = ImplicitEquation("x=1/y",tolerance=>.0001);
 
$f = ImplicitEquation("x=1/y",tolerance=>.0001);
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserImplicitPlane.pl parserImplicitPlane.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserImplicitPlane.pl parserImplicitPlane.pl]
 
** Implement implicit planes.
 
** Implement implicit planes.
 
$P = ImplicitPlane(Point(1,0,2),Vector(-1,1,3)); # -x+y+3z = 5
 
$P = ImplicitPlane(Point(1,0,2),Vector(-1,1,3)); # -x+y+3z = 5
Line 47: Line 47:
 
$P = ImplicitPlane([1,0,2],4); # x+2z = 4
 
$P = ImplicitPlane([1,0,2],4); # x+2z = 4
 
$P = ImplicitPlane("x+2y-z=5");
 
$P = ImplicitPlane("x+2y-z=5");
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserMultiAnswer.pl parserMultiAnswer.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserMultiAnswer.pl parserMultiAnswer.pl]
 
** Tie several blanks to a single answer checker.
 
** Tie several blanks to a single answer checker.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserNumberWithUnits.pl parserNumberWithUnits.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserNumberWithUnits.pl parserNumberWithUnits.pl]
 
** Implements a number with units.
 
** Implements a number with units.
 
ANS(NumberWithUnits("3 ft")->cmp);
 
ANS(NumberWithUnits("3 ft")->cmp);
 
ANS(NumberWithUnits("$a*$b ft")->cmp);
 
ANS(NumberWithUnits("$a*$b ft")->cmp);
 
ANS(NumberWithUnits($a*$b,"ft")->cmp);
 
ANS(NumberWithUnits($a*$b,"ft")->cmp);
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserParametricLine.pl parserParametricLine.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserParametricLine.pl parserParametricLine.pl]
 
** Implements Formulas that represent parametric lines.
 
** Implements Formulas that represent parametric lines.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserPopUp.pl.html parserPopUp.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserPopUp.pl.html parserPopUp.pl]
 
** Pop-up menus compatible with Value objects.
 
** Pop-up menus compatible with Value objects.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserRadioButtons.pl.html parserRadioButtons.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserRadioButtons.pl.html parserRadioButtons.pl]
 
** Radio buttons compatible with Value objects, specifically MultiAnswer objects.
 
** Radio buttons compatible with Value objects, specifically MultiAnswer objects.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserSolutionFor.pl parserSolutionFor.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserSolutionFor.pl parserSolutionFor.pl]
 
** An answer checker that checks if a student's answer satisifies a (possibly non-linear) implicit equation.
 
** An answer checker that checks if a student's answer satisifies a (possibly non-linear) implicit equation.
* [http://webwork.maa.org/doc/cvs/pg_CURRENT/macros/parserVectorUtils.pl.html parserVectorUtils.pl]
+
* [http://webwork.maa.org/pod/pg_TRUNK/macros/parserVectorUtils.pl.html parserVectorUtils.pl]
 
** Utility macros that are useful in vector problems.
 
** Utility macros that are useful in vector problems.
 
[[Category:MathObjects]]
 
[[Category:MathObjects]]

Revision as of 09:25, 21 November 2010

Using advanced methods one can modify the behavior of MathObjects and the way they interpret student answers by modifying the parser itself. By convention files that modify the parser are named starting with "parser" -- e.g. parserYourModsHere.pl.

Examples of modifications are give below. A description of advanced techniques for modifying the parser are at ModifyingParser (Advanced).

An other advanced method for customizing MathObjects is to modify the context in which the appear. See SpecializedContexts

Specialized Parser Macro files

Here is a partial list of the parser modifying files. Check the POD documentation for more examples. Use loadMacros("parserAssignment.pl"); to make the parser modifications available for a WeBWorK question.

  • parserAssignment.pl
    • checks answers of the form [math]y=3x+5[/math] with the LHS of the equation required.
    • follow the link above to see the additional statements that must be inserted in the question to use this file.
  • parserAutoStrings.pl
    • parserAutoStrings.pl - Force String() to accept any string as a potential answer.
  AutoStrings()
    -- all strings are accepted
  DefineStrings("string1", "string2")
  DefineStrings(qw(string1 string2)) 
    -- is a quick way to define "legitimate" strings.
     FormulaWithUnits("3x+1 ft")->cmp
     FormulaWithUnits($a*$x+1,"ft")->cmp
   Context("ImplicitEquation");
   $f = ImplicitEquation("x^2 = cos(y)");
   $f = ImplicitEquation("x^2 - 2y^2 = 5",limits=>[[-3,3],[-2,2]]);
   $f = ImplicitEquation("x=1/y",tolerance=>.0001);
   $P = ImplicitPlane(Point(1,0,2),Vector(-1,1,3)); #  -x+y+3z = 5
   $P = ImplicitPlane([1,0,2],[-1,1,3]);            #  -x+y+3z = 5
   $P = ImplicitPlane([1,0,2],4);                   #  x+2z = 4
   $P = ImplicitPlane("x+2y-z=5");
   ANS(NumberWithUnits("3 ft")->cmp);
   ANS(NumberWithUnits("$a*$b ft")->cmp);
   ANS(NumberWithUnits($a*$b,"ft")->cmp);