compiler/benchmarks/PPCBenchmarkResources.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 19 Nov 2014 10:52:37 +0000
changeset 420 b2f2f15cef26
child 421 7e08b31e0dae
permissions -rw-r--r--
Moved benchmarks to a separate package
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/compiler/benchmarks' }"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#PPCBenchmarkResources
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:'javaCache'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'PetitCompiler-Benchmarks'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!PPCBenchmarkResources methodsFor:'as yet unclassified'!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
changesSized: size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
	| string changes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
	changes := PharoFilesOpener default changesFileOrNil contents.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
	string :=  changes copyFrom: 1 to: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
	^ string
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
javaInDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	| files |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	files := self readDirectory: directory.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
	files := self files: files withExtension: 'java'.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	^ files collect: [ :f | (FileStream fileNamed: f) contents ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
javaLangClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
javaLangMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	^ '/*
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
 * @(#)Math.java	1.69 04/06/14
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
 *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
 */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
package java.lang;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
import java.util.Random;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
/**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
 * The class <code>Math</code> contains methods for performing basic
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
 * numeric operations such as the elementary exponential, logarithm,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
 * square root, and trigonometric functions.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
 * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
 * <p>Unlike some of the numeric methods of class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
 * <code>StrictMath</code>, all implementations of the equivalent
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
 * functions of class <code>Math</code> are not defined to return the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
 * bit-for-bit same results.  This relaxation permits
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
 * better-performing implementations where strict reproducibility is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
 * not required.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
 * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
 * <p>By default many of the <code>Math</code> methods simply call
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
 * the equivalent method in <code>StrictMath</code> for their
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
 * implementation.  Code generators are encouraged to use
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
 * platform-specific native libraries or microprocessor instructions,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
 * where available, to provide higher-performance implementations of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
 * <code>Math</code> methods.  Such higher-performance
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
 * implementations still must conform to the specification for
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
 * <code>Math</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
 * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
 * <p>The quality of implementation specifications concern two
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
 * properties, accuracy of the returned result and monotonicity of the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
 * method.  Accuracy of the floating-point <code>Math</code> methods
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
 * is measured in terms of <i>ulps</i>, units in the last place.  For
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
 * a given floating-point format, an ulp of a specific real number
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
 * value is the distance between the two floating-point values
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
 * bracketing that numerical value.  When discussing the accuracy of a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
 * method as a whole rather than at a specific argument, the number of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
 * ulps cited is for the worst-case error at any argument.  If a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
 * method always has an error less than 0.5 ulps, the method always
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
 * returns the floating-point number nearest the exact result; such a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
 * method is <i>correctly rounded</i>.  A correctly rounded method is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
 * generally the best a floating-point approximation can be; however,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
 * it is impractical for many floating-point methods to be correctly
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
 * rounded.  Instead, for the <code>Math</code> class, a larger error
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
 * bound of 1 or 2 ulps is allowed for certain methods.  Informally,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
 * with a 1 ulp error bound, when the exact result is a representable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
 * number, the exact result should be returned as the computed result;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
 * otherwise, either of the two floating-point values which bracket
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
 * the exact result may be returned.  For exact results large in
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
 * magnitude, one of the endpoints of the bracket may be infinite.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
 * Besides accuracy at individual arguments, maintaining proper
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
 * relations between the method at different arguments is also
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
 * important.  Therefore, most methods with more than 0.5 ulp errors
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
 * are required to be <i>semi-monotonic</i>: whenever the mathematical
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
 * function is non-decreasing, so is the floating-point approximation,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
 * likewise, whenever the mathematical function is non-increasing, so
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
 * is the floating-point approximation.  Not all approximations that
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
 * have 1 ulp accuracy will automatically meet the monotonicity
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
 * requirements.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
 * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
 * @author  unascribed
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
 * @author  Joseph D. Darcy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
 * @version 1.69, 06/14/04
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
 * @since   JDK1.0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
 */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
public final class Math {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
     * Don''t let anyone instantiate this class.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    private Math() {}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
     * The <code>double</code> value that is closer than any other to
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
     * <i>e</i>, the base of the natural logarithms.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    public static final double E = 2.7182818284590452354;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
     * The <code>double</code> value that is closer than any other to
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
     * <i>pi</i>, the ratio of the circumference of a circle to its
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
     * diameter.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    public static final double PI = 3.14159265358979323846;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
     * Returns the trigonometric sine of an angle.  Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
     * <ul><li>If the argument is NaN or an infinity, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
     * result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
     * same sign as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
     * @param   a   an angle, in radians.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
     * @return  the sine of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    public static double sin(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
	return StrictMath.sin(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
     * Returns the trigonometric cosine of an angle. Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
     * <ul><li>If the argument is NaN or an infinity, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
     * result is NaN.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
     * @param   a   an angle, in radians.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
     * @return  the cosine of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
    public static double cos(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
	return StrictMath.cos(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
   
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
     * Returns the trigonometric tangent of an angle.  Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
     * <ul><li>If the argument is NaN or an infinity, then the result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
     * is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
     * same sign as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
     * @param   a   an angle, in radians.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
     * @return  the tangent of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    public static double tan(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
	return StrictMath.tan(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
     * Returns the arc sine of an angle, in the range of -<i>pi</i>/2 through
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
     * <i>pi</i>/2. Special cases: 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
     * <ul><li>If the argument is NaN or its absolute value is greater 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
     * than 1, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
     * same sign as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
     * @param   a   the value whose arc sine is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
     * @return  the arc sine of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    public static double asin(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
	return StrictMath.asin(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
     * Returns the arc cosine of an angle, in the range of 0.0 through
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
     * <i>pi</i>.  Special case:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
     * <ul><li>If the argument is NaN or its absolute value is greater 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
     * than 1, then the result is NaN.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
     * @param   a   the value whose arc cosine is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
     * @return  the arc cosine of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    public static double acos(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
	return StrictMath.acos(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
     * Returns the arc tangent of an angle, in the range of -<i>pi</i>/2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
     * through <i>pi</i>/2.  Special cases: 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
     * <ul><li>If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
     * same sign as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
     * @param   a   the value whose arc tangent is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
     * @return  the arc tangent of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    public static double atan(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
	return StrictMath.atan(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
     * Converts an angle measured in degrees to an approximately
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
     * equivalent angle measured in radians.  The conversion from
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
     * degrees to radians is generally inexact.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
     * @param   angdeg   an angle, in degrees
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
     * @return  the measurement of the angle <code>angdeg</code>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
     *          in radians.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
     * @since   1.2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    public static double toRadians(double angdeg) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
	return angdeg / 180.0 * PI;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
     * Converts an angle measured in radians to an approximately
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
     * equivalent angle measured in degrees.  The conversion from
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
     * radians to degrees is generally inexact; users should
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
     * <i>not</i> expect <code>cos(toRadians(90.0))</code> to exactly
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
     * equal <code>0.0</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
     * @param   angrad   an angle, in radians
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
     * @return  the measurement of the angle <code>angrad</code>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
     *          in degrees.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
     * @since   1.2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    public static double toDegrees(double angrad) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
	return angrad * 180.0 / PI;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
     * Returns Euler''s number <i>e</i> raised to the power of a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
     * <code>double</code> value.  Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
     * <ul><li>If the argument is NaN, the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
     * <li>If the argument is positive infinity, then the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
     * positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
     * <li>If the argument is negative infinity, then the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
     * positive zero.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
     * @param   a   the exponent to raise <i>e</i> to.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
     * @return  the value <i>e</i><sup><code>a</code></sup>, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
     *          where <i>e</i> is the base of the natural logarithms.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    public static double exp(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
	return StrictMath.exp(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
     * Returns the natural logarithm (base <i>e</i>) of a <code>double</code>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
     * value.  Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
     * <ul><li>If the argument is NaN or less than zero, then the result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
     * is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
     * <li>If the argument is positive infinity, then the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
     * positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
     * <li>If the argument is positive zero or negative zero, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
     * result is negative infinity.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
     * @param   a   a value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
     * @return  the value ln&nbsp;<code>a</code>, the natural logarithm of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
     *          <code>a</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
    public static double log(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
	return StrictMath.log(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
     * Returns the base 10 logarithm of a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
     * <ul><li>If the argument is NaN or less than zero, then the result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
     * is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
     * <li>If the argument is positive infinity, then the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
     * positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
     * <li>If the argument is positive zero or negative zero, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
     * result is negative infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
     * <li> If the argument is equal to 10<sup><i>n</i></sup> for
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
     * integer <i>n</i>, then the result is <i>n</i>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
     * @param   a   a value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
     * @return  the base 10 logarithm of  <code>a</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    public static double log10(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
	return StrictMath.log10(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
     * Returns the correctly rounded positive square root of a 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
     * <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
     * <ul><li>If the argument is NaN or less than zero, then the result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
     * is NaN. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
     * <li>If the argument is positive infinity, then the result is positive 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
     * infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
     * <li>If the argument is positive zero or negative zero, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
     * result is the same as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
     * Otherwise, the result is the <code>double</code> value closest to 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
     * the true mathematical square root of the argument value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
     * @param   a   a value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
     * @return  the positive square root of <code>a</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
     *          If the argument is NaN or less than zero, the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    public static double sqrt(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
	return StrictMath.sqrt(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
				   // Note that hardware sqrt instructions
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
				   // frequently can be directly used by JITs
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
				   // and should be much faster than doing
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
				   // Math.sqrt in software.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
     * Returns the cube root of a <code>double</code> value.  For
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
     * positive finite <code>x</code>, <code>cbrt(-x) ==
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
     * -cbrt(x)</code>; that is, the cube root of a negative value is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
     * the negative of the cube root of that value''s magnitude.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
     * Special cases: 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
     * <li>If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
     * <li>If the argument is infinite, then the result is an infinity
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
     * with the same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
     * same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
     * @param   a   a value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
     * @return  the cube root of <code>a</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
    public static double cbrt(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
	return StrictMath.cbrt(a);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
     * Computes the remainder operation on two arguments as prescribed 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
     * by the IEEE 754 standard.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
     * The remainder value is mathematically equal to 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
     * <code>f1&nbsp;-&nbsp;f2</code>&nbsp;&times;&nbsp;<i>n</i>,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
     * where <i>n</i> is the mathematical integer closest to the exact 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
     * mathematical value of the quotient <code>f1/f2</code>, and if two 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
     * mathematical integers are equally close to <code>f1/f2</code>, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
     * then <i>n</i> is the integer that is even. If the remainder is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
     * zero, its sign is the same as the sign of the first argument. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
     * <ul><li>If either argument is NaN, or the first argument is infinite, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
     * or the second argument is positive zero or negative zero, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
     * result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
     * <li>If the first argument is finite and the second argument is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
     * infinite, then the result is the same as the first argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
     * @param   f1   the dividend.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
     * @param   f2   the divisor.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
     * @return  the remainder when <code>f1</code> is divided by
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
     *          <code>f2</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
    public static double IEEEremainder(double f1, double f2) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
        return StrictMath.IEEEremainder(f1, f2); // delegate to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
     * Returns the smallest (closest to negative infinity)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
     * <code>double</code> value that is greater than or equal to the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
     * argument and is equal to a mathematical integer. Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
     * <ul><li>If the argument value is already equal to a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
     * mathematical integer, then the result is the same as the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
     * argument.  <li>If the argument is NaN or an infinity or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
     * positive zero or negative zero, then the result is the same as
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
     * the argument.  <li>If the argument value is less than zero but
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
     * greater than -1.0, then the result is negative zero.</ul> Note
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
     * that the value of <code>Math.ceil(x)</code> is exactly the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
     * value of <code>-Math.floor(-x)</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
     * @param   a   a value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
     * @return  the smallest (closest to negative infinity) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
     *          floating-point value that is greater than or equal to 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
     *          the argument and is equal to a mathematical integer. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
    public static double ceil(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
	return StrictMath.ceil(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
     * Returns the largest (closest to positive infinity)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
     * <code>double</code> value that is less than or equal to the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
     * argument and is equal to a mathematical integer. Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
     * <ul><li>If the argument value is already equal to a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
     * mathematical integer, then the result is the same as the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
     * argument.  <li>If the argument is NaN or an infinity or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
     * positive zero or negative zero, then the result is the same as
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
     * the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
     * @param   a   a value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
     * @return  the largest (closest to positive infinity) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
     *          floating-point value that less than or equal to the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
     *          and is equal to a mathematical integer. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
    public static double floor(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
	return StrictMath.floor(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
     * Returns the <code>double</code> value that is closest in value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
     * to the argument and is equal to a mathematical integer. If two
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
     * <code>double</code> values that are mathematical integers are
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
     * equally close, the result is the integer value that is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
     * even. Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
     * <ul><li>If the argument value is already equal to a mathematical 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
     * integer, then the result is the same as the argument. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
     * <li>If the argument is NaN or an infinity or positive zero or negative 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
     * zero, then the result is the same as the argument.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
     * @param   a   a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
     * @return  the closest floating-point value to <code>a</code> that is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
     *          equal to a mathematical integer.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
    public static double rint(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
	return StrictMath.rint(a); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
     * Converts rectangular coordinates (<code>x</code>,&nbsp;<code>y</code>)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
     * to polar (r,&nbsp;<i>theta</i>).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
     * This method computes the phase <i>theta</i> by computing an arc tangent
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
     * of <code>y/x</code> in the range of -<i>pi</i> to <i>pi</i>. Special 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
     * cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
     * <ul><li>If either argument is NaN, then the result is NaN. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
     * <li>If the first argument is positive zero and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
     * is positive, or the first argument is positive and finite and the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
     * second argument is positive infinity, then the result is positive 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
     * zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
     * <li>If the first argument is negative zero and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
     * is positive, or the first argument is negative and finite and the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
     * second argument is positive infinity, then the result is negative zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
     * <li>If the first argument is positive zero and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
     * is negative, or the first argument is positive and finite and the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
     * second argument is negative infinity, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
     * <code>double</code> value closest to <i>pi</i>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
     * <li>If the first argument is negative zero and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
     * is negative, or the first argument is negative and finite and the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
     * second argument is negative infinity, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
     * <code>double</code> value closest to -<i>pi</i>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
     * <li>If the first argument is positive and the second argument is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
     * positive zero or negative zero, or the first argument is positive 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
     * infinity and the second argument is finite, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
     * <code>double</code> value closest to <i>pi</i>/2. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
     * <li>If the first argument is negative and the second argument is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
     * positive zero or negative zero, or the first argument is negative 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
     * infinity and the second argument is finite, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
     * <code>double</code> value closest to -<i>pi</i>/2. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
     * <li>If both arguments are positive infinity, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
     * <code>double</code> value closest to <i>pi</i>/4. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
     * <li>If the first argument is positive infinity and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
     * is negative infinity, then the result is the <code>double</code> 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
     * value closest to 3*<i>pi</i>/4. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
     * <li>If the first argument is negative infinity and the second argument 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
     * is positive infinity, then the result is the <code>double</code> value 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
     * closest to -<i>pi</i>/4. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
     * <li>If both arguments are negative infinity, then the result is the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
     * <code>double</code> value closest to -3*<i>pi</i>/4.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
     * <p>The computed result must be within 2 ulps of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
     * @param   y   the ordinate coordinate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
     * @param   x   the abscissa coordinate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
     * @return  the <i>theta</i> component of the point
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
     *          (<i>r</i>,&nbsp;<i>theta</i>)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
     *          in polar coordinates that corresponds to the point
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
     *          (<i>x</i>,&nbsp;<i>y</i>) in Cartesian coordinates.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
    public static double atan2(double y, double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
	return StrictMath.atan2(y, x); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
     * Returns the value of the first argument raised to the power of the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
     * second argument. Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
     * <ul><li>If the second argument is positive or negative zero, then the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
     * result is 1.0. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
     * <li>If the second argument is 1.0, then the result is the same as the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
     * first argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
     * <li>If the second argument is NaN, then the result is NaN. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
     * <li>If the first argument is NaN and the second argument is nonzero, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
     * then the result is NaN. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
     * <li>If
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
     * <li>the absolute value of the first argument is greater than 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
     * and the second argument is positive infinity, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
     * <li>the absolute value of the first argument is less than 1 and
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
     * the second argument is negative infinity,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
     * then the result is positive infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
     * <li>the absolute value of the first argument is greater than 1 and 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
     * the second argument is negative infinity, or 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
     * <li>the absolute value of the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
     * first argument is less than 1 and the second argument is positive 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
     * infinity,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
     * then the result is positive zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
     * <li>If the absolute value of the first argument equals 1 and the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
     * second argument is infinite, then the result is NaN. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
     * <li>the first argument is positive zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
     * is greater than zero, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
     * <li>the first argument is positive infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
     * argument is less than zero,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
     * then the result is positive zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
     * <li>the first argument is positive zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
     * is less than zero, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
     * <li>the first argument is positive infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
     * argument is greater than zero,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
     * then the result is positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
     * <li>the first argument is negative zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
     * is greater than zero but not a finite odd integer, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
     * <li>the first argument is negative infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   572
     * argument is less than zero but not a finite odd integer,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   573
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
     * then the result is positive zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   578
     * <li>the first argument is negative zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
     * is a positive finite odd integer, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
     * <li>the first argument is negative infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   581
     * argument is a negative finite odd integer,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
     * then the result is negative zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
     * <li>If
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
     * <li>the first argument is negative zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
     * is less than zero but not a finite odd integer, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
     * <li>the first argument is negative infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
     * argument is greater than zero but not a finite odd integer,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
     * then the result is positive infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
     * <li>If 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
     * <li>the first argument is negative zero and the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
     * is a negative finite odd integer, or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
     * <li>the first argument is negative infinity and the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
     * argument is a positive finite odd integer,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
     * then the result is negative infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
     * <li>If the first argument is finite and less than zero
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
     * <li> if the second argument is a finite even integer, the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
     * result is equal to the result of raising the absolute value of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
     * the first argument to the power of the second argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
     * <li>if the second argument is a finite odd integer, the result
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
     * is equal to the negative of the result of raising the absolute
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
     * value of the first argument to the power of the second
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
     * argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
     * <li>if the second argument is finite and not an integer, then
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
     * the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
     * <li>If both arguments are integers, then the result is exactly equal 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
     * to the mathematical result of raising the first argument to the power 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
     * of the second argument if that result can in fact be represented 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
     * exactly as a <code>double</code> value.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
     * <p>(In the foregoing descriptions, a floating-point value is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
     * considered to be an integer if and only if it is finite and a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
     * fixed point of the method {@link #ceil <tt>ceil</tt>} or,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
     * equivalently, a fixed point of the method {@link #floor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
     * <tt>floor</tt>}. A value is a fixed point of a one-argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
     * method if and only if the result of applying the method to the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
     * value is equal to the value.)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   630
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
     * @param   a   the base.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
     * @param   b   the exponent.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
     * @return  the value <code>a<sup>b</sup></code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
    public static double pow(double a, double b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
	return StrictMath.pow(a, b); // default impl. delegates to StrictMath
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
     * Returns the closest <code>int</code> to the argument. The 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
     * result is rounded to an integer by adding 1/2, taking the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
     * floor of the result, and casting the result to type <code>int</code>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
     * In other words, the result is equal to the value of the expression:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
     * <p><pre>(int)Math.floor(a + 0.5f)</pre>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
     * <p>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
     * <ul><li>If the argument is NaN, the result is 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
     * <li>If the argument is negative infinity or any value less than or 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
     * equal to the value of <code>Integer.MIN_VALUE</code>, the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
     * equal to the value of <code>Integer.MIN_VALUE</code>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
     * <li>If the argument is positive infinity or any value greater than or 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
     * equal to the value of <code>Integer.MAX_VALUE</code>, the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
     * equal to the value of <code>Integer.MAX_VALUE</code>.</ul> 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
     * @param   a   a floating-point value to be rounded to an integer.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
     * @return  the value of the argument rounded to the nearest
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
     *          <code>int</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
     * @see     java.lang.Integer#MAX_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
     * @see     java.lang.Integer#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
    public static int round(float a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
	return (int)floor(a + 0.5f);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
     * Returns the closest <code>long</code> to the argument. The result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
     * is rounded to an integer by adding 1/2, taking the floor of the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
     * result, and casting the result to type <code>long</code>. In other 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
     * words, the result is equal to the value of the expression:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   673
     * <p><pre>(long)Math.floor(a + 0.5d)</pre>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
     * <p>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   675
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
     * <ul><li>If the argument is NaN, the result is 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
     * <li>If the argument is negative infinity or any value less than or 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
     * equal to the value of <code>Long.MIN_VALUE</code>, the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
     * equal to the value of <code>Long.MIN_VALUE</code>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
     * <li>If the argument is positive infinity or any value greater than or 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   681
     * equal to the value of <code>Long.MAX_VALUE</code>, the result is 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
     * equal to the value of <code>Long.MAX_VALUE</code>.</ul> 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
     * @param   a   a floating-point value to be rounded to a 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
     *		<code>long</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
     * @return  the value of the argument rounded to the nearest
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
     *          <code>long</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
     * @see     java.lang.Long#MAX_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   689
     * @see     java.lang.Long#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   690
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
    public static long round(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
	return (long)floor(a + 0.5d);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   693
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
    private static Random randomNumberGenerator;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
    private static synchronized void initRNG() {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
        if (randomNumberGenerator == null) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
            randomNumberGenerator = new Random();
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   702
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
     * Returns a <code>double</code> value with a positive sign, greater 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   704
     * than or equal to <code>0.0</code> and less than <code>1.0</code>. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   705
     * Returned values are chosen pseudorandomly with (approximately) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
     * uniform distribution from that range. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   707
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
     * <p>When this method is first called, it creates a single new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   709
     * pseudorandom-number generator, exactly as if by the expression
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
     * <blockquote><pre>new java.util.Random</pre></blockquote> This
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   711
     * new pseudorandom-number generator is used thereafter for all
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   712
     * calls to this method and is used nowhere else.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   713
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
     * <p>This method is properly synchronized to allow correct use by
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
     * more than one thread. However, if many threads need to generate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   716
     * pseudorandom numbers at a great rate, it may reduce contention
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   717
     * for each thread to have its own pseudorandom-number generator.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   718
     *  
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   719
     * @return  a pseudorandom <code>double</code> greater than or equal 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   720
     * to <code>0.0</code> and less than <code>1.0</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   721
     * @see     java.util.Random#nextDouble()
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   722
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   723
    public static double random() {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   724
        if (randomNumberGenerator == null) initRNG();
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   725
        return randomNumberGenerator.nextDouble();
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   726
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   727
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   728
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   729
     * Returns the absolute value of an <code>int</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   730
     * If the argument is not negative, the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   731
     * If the argument is negative, the negation of the argument is returned. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   732
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   733
     * <p>Note that if the argument is equal to the value of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   734
     * <code>Integer.MIN_VALUE</code>, the most negative representable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   735
     * <code>int</code> value, the result is that same value, which is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   736
     * negative.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   737
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   738
     * @param   a   the argument whose absolute value is to be determined
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   739
     * @return  the absolute value of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   740
     * @see     java.lang.Integer#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   741
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   742
    public static int abs(int a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
	return (a < 0) ? -a : a;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
     * Returns the absolute value of a <code>long</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
     * If the argument is not negative, the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
     * If the argument is negative, the negation of the argument is returned. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   750
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
     * <p>Note that if the argument is equal to the value of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752
     * <code>Long.MIN_VALUE</code>, the most negative representable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   753
     * <code>long</code> value, the result is that same value, which
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   754
     * is negative.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   755
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   756
     * @param   a   the argument whose absolute value is to be determined
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   757
     * @return  the absolute value of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   758
     * @see     java.lang.Long#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   759
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   760
    public static long abs(long a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   761
	return (a < 0) ? -a : a;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   762
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   763
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   764
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   765
     * Returns the absolute value of a <code>float</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   766
     * If the argument is not negative, the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   767
     * If the argument is negative, the negation of the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   768
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   769
     * <ul><li>If the argument is positive zero or negative zero, the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   770
     * result is positive zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   771
     * <li>If the argument is infinite, the result is positive infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   772
     * <li>If the argument is NaN, the result is NaN.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   773
     * In other words, the result is the same as the value of the expression: 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   774
     * <p><pre>Float.intBitsToFloat(0x7fffffff & Float.floatToIntBits(a))</pre>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   775
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   776
     * @param   a   the argument whose absolute value is to be determined
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   777
     * @return  the absolute value of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   778
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   779
    public static float abs(float a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   780
        return (a <= 0.0F) ? 0.0F - a : a;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   781
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   782
  
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   783
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   784
     * Returns the absolute value of a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   785
     * If the argument is not negative, the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   786
     * If the argument is negative, the negation of the argument is returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   787
     * Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   788
     * <ul><li>If the argument is positive zero or negative zero, the result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   789
     * is positive zero. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   790
     * <li>If the argument is infinite, the result is positive infinity. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   791
     * <li>If the argument is NaN, the result is NaN.</ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   792
     * In other words, the result is the same as the value of the expression: 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   793
     * <p><code>Double.longBitsToDouble((Double.doubleToLongBits(a)&lt;&lt;1)&gt;&gt;&gt;1)</code> 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   794
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   795
     * @param   a   the argument whose absolute value is to be determined
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   796
     * @return  the absolute value of the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   797
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   798
    public static double abs(double a) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   799
        return (a <= 0.0D) ? 0.0D - a : a;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   800
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   801
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   802
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   803
     * Returns the greater of two <code>int</code> values. That is, the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   804
     * result is the argument closer to the value of 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   805
     * <code>Integer.MAX_VALUE</code>. If the arguments have the same value, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   806
     * the result is that same value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   807
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   808
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   809
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   810
     * @return  the larger of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   811
     * @see     java.lang.Long#MAX_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   812
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   813
    public static int max(int a, int b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   814
	return (a >= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   815
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   816
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   817
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   818
     * Returns the greater of two <code>long</code> values. That is, the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   819
     * result is the argument closer to the value of 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   820
     * <code>Long.MAX_VALUE</code>. If the arguments have the same value, 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   821
     * the result is that same value. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   822
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   823
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   824
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   825
     * @return  the larger of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   826
     * @see     java.lang.Long#MAX_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   827
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   828
    public static long max(long a, long b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   829
	return (a >= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   830
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   832
    private static long negativeZeroFloatBits = Float.floatToIntBits(-0.0f);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   833
    private static long negativeZeroDoubleBits = Double.doubleToLongBits(-0.0d);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   834
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   835
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   836
     * Returns the greater of two <code>float</code> values.  That is,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   837
     * the result is the argument closer to positive infinity. If the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   838
     * arguments have the same value, the result is that same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   839
     * value. If either value is NaN, then the result is NaN.  Unlike
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   840
     * the numerical comparison operators, this method considers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   841
     * negative zero to be strictly smaller than positive zero. If one
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   842
     * argument is positive zero and the other negative zero, the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   843
     * result is positive zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   844
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   845
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   846
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   847
     * @return  the larger of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   848
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   849
    public static float max(float a, float b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   850
        if (a !!= a) return a;	// a is NaN
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   851
	if ((a == 0.0f) && (b == 0.0f)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   852
	    && (Float.floatToIntBits(a) == negativeZeroFloatBits)) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   853
	    return b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   854
	}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   855
	return (a >= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   856
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   857
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   858
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   859
     * Returns the greater of two <code>double</code> values.  That
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   860
     * is, the result is the argument closer to positive infinity. If
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   861
     * the arguments have the same value, the result is that same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   862
     * value. If either value is NaN, then the result is NaN.  Unlike
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   863
     * the numerical comparison operators, this method considers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   864
     * negative zero to be strictly smaller than positive zero. If one
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   865
     * argument is positive zero and the other negative zero, the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   866
     * result is positive zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   867
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   868
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   869
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   870
     * @return  the larger of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   871
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   872
    public static double max(double a, double b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   873
        if (a !!= a) return a;	// a is NaN
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   874
	if ((a == 0.0d) && (b == 0.0d)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   875
	    && (Double.doubleToLongBits(a) == negativeZeroDoubleBits)) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   876
	    return b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   877
	}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   878
	return (a >= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   879
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   880
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   881
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   882
     * Returns the smaller of two <code>int</code> values. That is,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   883
     * the result the argument closer to the value of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   884
     * <code>Integer.MIN_VALUE</code>.  If the arguments have the same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   885
     * value, the result is that same value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   886
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   887
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   888
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   889
     * @return  the smaller of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   890
     * @see     java.lang.Long#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   891
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   892
    public static int min(int a, int b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   893
	return (a <= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   894
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   895
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   896
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   897
     * Returns the smaller of two <code>long</code> values. That is,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   898
     * the result is the argument closer to the value of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   899
     * <code>Long.MIN_VALUE</code>. If the arguments have the same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   900
     * value, the result is that same value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   901
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   902
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   903
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   904
     * @return  the smaller of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   905
     * @see     java.lang.Long#MIN_VALUE
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   906
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   907
    public static long min(long a, long b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   908
	return (a <= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   909
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   910
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   911
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   912
     * Returns the smaller of two <code>float</code> values.  That is,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   913
     * the result is the value closer to negative infinity. If the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   914
     * arguments have the same value, the result is that same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   915
     * value. If either value is NaN, then the result is NaN.  Unlike
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   916
     * the numerical comparison operators, this method considers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   917
     * negative zero to be strictly smaller than positive zero.  If
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   918
     * one argument is positive zero and the other is negative zero,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   919
     * the result is negative zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   920
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   921
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   922
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   923
     * @return  the smaller of <code>a</code> and <code>b.</code>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   924
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   925
    public static float min(float a, float b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   926
        if (a !!= a) return a;	// a is NaN
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   927
	if ((a == 0.0f) && (b == 0.0f)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   928
	    && (Float.floatToIntBits(b) == negativeZeroFloatBits)) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   929
	    return b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   930
	}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   931
	return (a <= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   932
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   933
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   934
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   935
     * Returns the smaller of two <code>double</code> values.  That
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   936
     * is, the result is the value closer to negative infinity. If the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   937
     * arguments have the same value, the result is that same
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   938
     * value. If either value is NaN, then the result is NaN.  Unlike
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   939
     * the numerical comparison operators, this method considers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   940
     * negative zero to be strictly smaller than positive zero. If one
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   941
     * argument is positive zero and the other is negative zero, the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   942
     * result is negative zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   943
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   944
     * @param   a   an argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   945
     * @param   b   another argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   946
     * @return  the smaller of <code>a</code> and <code>b</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   947
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   948
    public static double min(double a, double b) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   949
        if (a !!= a) return a;	// a is NaN
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   950
	if ((a == 0.0d) && (b == 0.0d)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   951
	    && (Double.doubleToLongBits(b) == negativeZeroDoubleBits)) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   952
	    return b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   953
	}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   954
	return (a <= b) ? a : b;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   955
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   956
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   957
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   958
     * Returns the size of an ulp of the argument.  An ulp of a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   959
     * <code>double</code> value is the positive distance between this
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   960
     * floating-point value and the <code>double</code> value next
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   961
     * larger in magnitude.  Note that for non-NaN <i>x</i>,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   962
     * <code>ulp(-<i>x</i>) == ulp(<i>x</i>)</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   963
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   964
     * <p>Special Cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   965
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   966
     * <li> If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   967
     * <li> If the argument is positive or negative infinity, then the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   968
     * result is positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   969
     * <li> If the argument is positive or negative zero, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   970
     * <code>Double.MIN_VALUE</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   971
     * <li> If the argument is &plusmn;<code>Double.MAX_VALUE</code>, then
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   972
     * the result is equal to 2<sup>971</sup>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   973
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   974
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   975
     * @param d the floating-point value whose ulp is to be returned
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   976
     * @return the size of an ulp of the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   977
     * @author Joseph D. Darcy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   978
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   979
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   980
    public static double ulp(double d) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   981
	return sun.misc.FpUtils.ulp(d);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   982
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   983
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   984
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   985
     * Returns the size of an ulp of the argument.  An ulp of a
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   986
     * <code>float</code> value is the positive distance between this
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   987
     * floating-point value and the <code>float</code> value next
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   988
     * larger in magnitude.  Note that for non-NaN <i>x</i>,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   989
     * <code>ulp(-<i>x</i>) == ulp(<i>x</i>)</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   990
     * 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   991
     * <p>Special Cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   992
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   993
     * <li> If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   994
     * <li> If the argument is positive or negative infinity, then the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   995
     * result is positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   996
     * <li> If the argument is positive or negative zero, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   997
     * <code>Float.MIN_VALUE</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   998
     * <li> If the argument is &plusmn;<code>Float.MAX_VALUE</code>, then
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   999
     * the result is equal to 2<sup>104</sup>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1000
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1001
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1002
     * @param f the floating-point value whose ulp is to be returned
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1003
     * @return the size of an ulp of the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1004
     * @author Joseph D. Darcy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1005
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1006
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1007
    public static float ulp(float f) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1008
	return sun.misc.FpUtils.ulp(f);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1009
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1010
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1011
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1012
     * Returns the signum function of the argument; zero if the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1013
     * is zero, 1.0 if the argument is greater than zero, -1.0 if the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1014
     * argument is less than zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1015
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1016
     * <p>Special Cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1017
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1018
     * <li> If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1019
     * <li> If the argument is positive zero or negative zero, then the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1020
     *      result is the same as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1021
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1022
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1023
     * @param d the floating-point value whose signum is to be returned
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1024
     * @return the signum function of the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1025
     * @author Joseph D. Darcy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1026
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1027
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1028
    public static double signum(double d) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1029
	return sun.misc.FpUtils.signum(d);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1030
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1031
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1032
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1033
     * Returns the signum function of the argument; zero if the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1034
     * is zero, 1.0f if the argument is greater than zero, -1.0f if the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1035
     * argument is less than zero.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1036
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1037
     * <p>Special Cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1038
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1039
     * <li> If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1040
     * <li> If the argument is positive zero or negative zero, then the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1041
     *      result is the same as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1042
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1043
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1044
     * @param f the floating-point value whose signum is to be returned
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1045
     * @return the signum function of the argument
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1046
     * @author Joseph D. Darcy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1047
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1048
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1049
    public static float signum(float f) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1050
	return sun.misc.FpUtils.signum(f);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1051
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1052
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1053
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1054
     * Returns the hyperbolic sine of a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1055
     * The hyperbolic sine of <i>x</i> is defined to be
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1056
     * (<i>e<sup>x</sup>&nbsp;-&nbsp;e<sup>-x</sup></i>)/2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1057
     * where <i>e</i> is {@linkplain Math#E Euler''s number}.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1058
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1059
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1060
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1061
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1062
     * <li>If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1063
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1064
     * <li>If the argument is infinite, then the result is an infinity
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1065
     * with the same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1066
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1067
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1068
     * same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1069
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1070
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1071
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1072
     * <p>The computed result must be within 2.5 ulps of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1073
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1074
     * @param   x The number whose hyperbolic sine is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1075
     * @return  The hyperbolic sine of <code>x</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1076
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1077
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1078
    public static double sinh(double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1079
	return StrictMath.sinh(x);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1080
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1081
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1082
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1083
     * Returns the hyperbolic cosine of a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1084
     * The hyperbolic cosine of <i>x</i> is defined to be
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1085
     * (<i>e<sup>x</sup>&nbsp;+&nbsp;e<sup>-x</sup></i>)/2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1086
     * where <i>e</i> is {@linkplain Math#E Euler''s number}.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1087
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1088
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1089
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1090
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1091
     * <li>If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1092
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1093
     * <li>If the argument is infinite, then the result is positive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1094
     * infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1095
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1096
     * <li>If the argument is zero, then the result is <code>1.0</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1097
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1098
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1099
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1100
     * <p>The computed result must be within 2.5 ulps of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1101
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1102
     * @param   x The number whose hyperbolic cosine is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1103
     * @return  The hyperbolic cosine of <code>x</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1104
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1105
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1106
    public static double cosh(double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1107
	return StrictMath.cosh(x);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1108
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1109
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1110
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1111
     * Returns the hyperbolic tangent of a <code>double</code> value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1112
     * The hyperbolic tangent of <i>x</i> is defined to be
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1113
     * (<i>e<sup>x</sup>&nbsp;-&nbsp;e<sup>-x</sup></i>)/(<i>e<sup>x</sup>&nbsp;+&nbsp;e<sup>-x</sup></i>),
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1114
     * in other words, {@linkplain Math#sinh
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1115
     * sinh(<i>x</i>)}/{@linkplain Math#cosh cosh(<i>x</i>)}.  Note
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1116
     * that the absolute value of the exact tanh is always less than
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1117
     * 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1118
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1119
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1120
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1121
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1122
     * <li>If the argument is NaN, then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1123
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1124
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1125
     * same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1126
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1127
     * <li>If the argument is positive infinity, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1128
     * <code>+1.0</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1129
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1130
     * <li>If the argument is negative infinity, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1131
     * <code>-1.0</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1132
     *  
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1133
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1134
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1135
     * <p>The computed result must be within 2.5 ulps of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1136
     * The result of <code>tanh</code> for any finite input must have
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1137
     * an absolute value less than or equal to 1.  Note that once the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1138
     * exact result of tanh is within 1/2 of an ulp of the limit value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1139
     * of &plusmn;1, correctly signed &plusmn;<code>1.0</code> should
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1140
     * be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1141
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1142
     * @param   x The number whose hyperbolic tangent is to be returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1143
     * @return  The hyperbolic tangent of <code>x</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1144
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1145
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1146
    public static double tanh(double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1147
	return StrictMath.tanh(x);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1148
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1149
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1150
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1151
     * Returns sqrt(<i>x</i><sup>2</sup>&nbsp;+<i>y</i><sup>2</sup>)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1152
     * without intermediate overflow or underflow.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1153
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1154
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1155
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1156
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1157
     * <li> If either argument is infinite, then the result
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1158
     * is positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1159
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1160
     * <li> If either argument is NaN and neither argument is infinite,
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1161
     * then the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1162
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1163
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1164
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1165
     * <p>The computed result must be within 1 ulp of the exact
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1166
     * result.  If one parameter is held constant, the results must be
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1167
     * semi-monotonic in the other parameter.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1168
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1169
     * @param x a value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1170
     * @param y a value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1171
     * @return sqrt(<i>x</i><sup>2</sup>&nbsp;+<i>y</i><sup>2</sup>)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1172
     * without intermediate overflow or underflow
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1173
     * @since 1.5
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1174
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1175
    public static double hypot(double x, double y) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1176
	return StrictMath.hypot(x, y);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1177
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1178
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1179
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1180
     * Returns <i>e</i><sup>x</sup>&nbsp;-1.  Note that for values of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1181
     * <i>x</i> near 0, the exact sum of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1182
     * <code>expm1(x)</code>&nbsp;+&nbsp;1 is much closer to the true
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1183
     * result of <i>e</i><sup>x</sup> than <code>exp(x)</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1184
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1185
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1186
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1187
     * <li>If the argument is NaN, the result is NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1188
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1189
     * <li>If the argument is positive infinity, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1190
     * positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1191
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1192
     * <li>If the argument is negative infinity, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1193
     * -1.0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1194
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1195
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1196
     * same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1197
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1198
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1199
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1200
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1201
     * Results must be semi-monotonic.  The result of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1202
     * <code>expm1</code> for any finite input must be greater than or
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1203
     * equal to <code>-1.0</code>.  Note that once the exact result of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1204
     * <i>e</i><sup><code>x</code></sup>&nbsp;-&nbsp;1 is within 1/2
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1205
     * ulp of the limit value -1, <code>-1.0</code> should be
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1206
     * returned.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1207
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1208
     * @param   x   the exponent to raise <i>e</i> to in the computation of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1209
     *              <i>e</i><sup><code>x</code></sup>&nbsp;-1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1210
     * @return  the value <i>e</i><sup><code>x</code></sup>&nbsp;-&nbsp;1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1211
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1212
    public static double expm1(double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1213
	return StrictMath.expm1(x);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1214
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1215
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1216
    /**
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1217
     * Returns the natural logarithm of the sum of the argument and 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1218
     * Note that for small values <code>x</code>, the result of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1219
     * <code>log1p(x)</code> is much closer to the true result of ln(1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1220
     * + <code>x</code>) than the floating-point evaluation of
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1221
     * <code>log(1.0+x)</code>.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1222
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1223
     * <p>Special cases:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1224
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1225
     * <ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1226
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1227
     * <li>If the argument is NaN or less than -1, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1228
     * NaN.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1229
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1230
     * <li>If the argument is positive infinity, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1231
     * positive infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1232
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1233
     * <li>If the argument is negative one, then the result is
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1234
     * negative infinity.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1235
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1236
     * <li>If the argument is zero, then the result is a zero with the
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1237
     * same sign as the argument.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1238
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1239
     * </ul>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1240
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1241
     * <p>The computed result must be within 1 ulp of the exact result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1242
     * Results must be semi-monotonic.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1243
     *
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1244
     * @param   x   a value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1245
     * @return the value ln(<code>x</code>&nbsp;+&nbsp;1), the natural
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1246
     * log of <code>x</code>&nbsp;+&nbsp;1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1247
     */
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1248
    public static double log1p(double x) {
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1249
	return StrictMath.log1p(x);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1250
    }
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1251
}
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1252
'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1253
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1254
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1255
javaSourcesBig
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1256
	^ self workingJavaInDirectory: '../java-src/java/util'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1257
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1258
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1259
petitParserPackage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1260
^ '
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1261
Object subclass: #PPCharSetPredicate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1262
	instanceVariableNames: ''block classification''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1263
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1264
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1265
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1266
!!PPCharSetPredicate commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1267
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1268
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1269
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1270
!!PPCharSetPredicate methodsFor: ''initialization'' stamp: ''lr 8/30/2010 12:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1271
initializeOn: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1272
	block := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1273
	classification := Array new: 255.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1274
	1 to: classification size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1275
		classification at: index put: (block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1276
			value: (Character value: index)) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1277
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1278
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1279
!!PPCharSetPredicate methodsFor: ''evaluating'' stamp: ''lr 8/30/2010 12:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1280
value: aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1281
	| index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1282
	index := aCharacter asInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1283
	index == 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1284
		ifTrue: [ ^ block value: aCharacter ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1285
	index > 255
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1286
		ifTrue: [ ^ block value: aCharacter ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1287
	^ classification at: index!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1288
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1289
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1290
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1291
PPCharSetPredicate class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1292
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1293
!!PPCharSetPredicate class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1294
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1295
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1296
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1297
!!PPCharSetPredicate class methodsFor: ''instance creation'' stamp: ''lr 8/25/2010 11:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1298
on: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1299
	^ self basicNew initializeOn: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1300
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1301
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1302
PPDelegateParser subclass: #PPExpressionParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1303
	instanceVariableNames: ''operators''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1304
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1305
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1306
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1307
!!PPExpressionParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1308
A PPExpressionParser is a parser to conveniently define an expression grammar with prefix, postfix, and left- and right-associative infix operators.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1309
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1310
The following code initializes a parser for arithmetic expressions. First we instantiate an expression parser, a simple parser for expressions in parenthesis and a simple parser for integer numbers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1311
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1312
	expression := PPExpressionParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1313
	parens := $( asParser token trim , expression , $) asParser token trim 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1314
		==> [ :nodes | nodes second ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1315
	integer := #digit asParser plus token trim
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1316
		==> [ :token | token value asInteger ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1317
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1318
Then we define on what term the expression grammar is built on:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1319
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1320
	expression term: parens / integer.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1321
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1322
Finally we define the operator-groups in descending precedence. Note, that the action blocks receive both, the terms and the parsed operator in the order they appear in the parsed input. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1323
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1324
	expression
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1325
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1326
			g prefix: $- asParser token trim do: [ :op :a | a negated ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1327
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1328
			g postfix: ''++'' asParser token trim do: [ :a :op | a + 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1329
			g postfix: ''--'' asParser token trim do: [ :a :op | a - 1 ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1330
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1331
			g right: $^ asParser token trim do: [ :a :op :b | a raisedTo: b ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1332
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1333
			g left: $* asParser token trim do: [ :a :op :b | a * b ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1334
			g left: $/ asParser token trim do: [ :a :op :b | a / b ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1335
		group: [ :g |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1336
			g left: $+ asParser token trim do: [ :a :op :b | a + b ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1337
			g left: $- asParser token trim do: [ :a :op :b | a - b ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1338
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1339
After evaluating the above code the ''expression'' is an efficient parser that evaluates examples like:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1340
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1341
	expression parse: ''-8++''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1342
	expression parse: ''1+2*3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1343
	expression parse: ''1*2+3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1344
	expression parse: ''(1+2)*3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1345
	expression parse: ''8/4/2''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1346
	expression parse: ''8/(4/2)''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1347
	expression parse: ''2^2^3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1348
	expression parse: ''(2^2)^3''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1349
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1350
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1351
	operators	<Dictionary>	The operators defined in the current group.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1352
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1353
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1354
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1355
build: aParser right: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1356
	^ (aParser separatedBy: aChoiceParser) foldRight: [ :a :op :b | op first value: a value: op second value: b ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1357
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1358
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1359
build: aParser left: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1360
	^ (aParser separatedBy: aChoiceParser) foldLeft: [ :a :op :b | op first value: a value: op second value: b ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1361
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1362
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 12/4/2009 17:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1363
build: aParser postfix: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1364
	^ aParser , aChoiceParser star map: [ :term :ops | ops inject: term into: [ :result :operator | operator first value: result value: operator second ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1365
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1366
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 21:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1367
buildOn: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1368
	^ self buildSelectors inject: aParser into: [ :term :selector |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1369
		| list |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1370
		list := operators at: selector ifAbsent: [ #() ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1371
		list isEmpty
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1372
			ifTrue: [ term ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1373
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1374
				self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1375
					perform: selector with: term 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1376
					with: (list size = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1377
						ifTrue: [ list first first ==> [ :operator | Array with: list first second with: operator ] ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1378
						ifFalse: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1379
							list
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1380
								inject: PPChoiceParser new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1381
								into: [ :choice :each | choice / (each first ==> [ :operator | Array with: each second with: operator ]) ] ]) ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1382
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1383
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 12/4/2009 17:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1384
build: aParser prefix: aChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1385
	^ aChoiceParser star , aParser map: [ :ops :term | ops reversed inject: term into: [ :result :operator | operator first value: operator second value: result ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1386
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1387
!!PPExpressionParser methodsFor: ''private'' stamp: ''FirstnameLastname 11/26/2009 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1388
buildSelectors
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1389
	^ #(build:prefix: build:postfix: build:right: build:left:)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1390
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1391
!!PPExpressionParser methodsFor: ''private'' stamp: ''lr 2/7/2010 23:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1392
operator: aSymbol parser: aParser do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1393
	parser isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1394
		ifTrue: [ ^ self error: ''You did not specify a term when creating the receiver.'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1395
	operators isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1396
		ifTrue: [ ^ self error: ''Use #group: to define precedence groups in descending order.'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1397
	(operators at: aSymbol ifAbsentPut: [ OrderedCollection new ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1398
		addLast: (Array with: aParser asParser with: aBlock)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1399
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1400
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1401
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 21:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1402
term: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1403
	"Defines the initial term aParser of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1404
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1405
	parser isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1406
		ifTrue: [ parser := aParser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1407
		ifFalse: [ self error: ''Unable to redefine the term.'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1408
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1409
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1410
postfix: aParser do: aTwoArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1411
	"Define a postfix operator aParser. Evaluate aTwoArgumentBlock with the term and the operator."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1412
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1413
	self operator: #build:postfix: parser: aParser do: aTwoArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1414
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1415
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1416
left: aParser do: aThreeArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1417
	"Define an operator aParser that is left-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1418
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1419
	self operator: #build:left: parser: aParser do: aThreeArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1421
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1422
prefix: aParser do: aTwoArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1423
	"Define a prefix operator aParser. Evaluate aTwoArgumentBlock with the operator and the term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1424
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1425
	self operator: #build:prefix: parser: aParser do: aTwoArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1426
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1427
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''FirstnameLastname 11/26/2009 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1428
right: aParser do: aThreeArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1429
	"Define an operator aParser that is right-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1430
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1431
	self operator: #build:right: parser: aParser do: aThreeArgumentBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1432
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1433
!!PPExpressionParser methodsFor: ''specifying'' stamp: ''lr 2/7/2010 23:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1434
group: aOneArgumentBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1435
	"Defines a priority group by evaluating aOneArgumentBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1436
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1437
	operators := Dictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1438
	parser := [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1439
		aOneArgumentBlock value: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1440
	 	self buildOn: parser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1441
			ensure: [ operators := nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1442
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1443
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1444
PPDelegateParser subclass: #PPCompositeParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1445
	instanceVariableNames: ''dependencies''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1446
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1447
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1448
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1449
!!PPCompositeParser commentStamp: ''lr 12/4/2009 18:38'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1450
A PPCompositeParser is composed parser built from various primitive parsers. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1451
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1452
Every production in the receiver is specified as a method that returns its parser. Note that every production requires an instance variable of the same name, otherwise the production is not cached and cannot be used in recursive grammars. Productions should refer to each other by reading the respective inst-var. Note: these inst-vars are typically not written, as the assignment happens in the initialize method using reflection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1453
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1454
The start production is defined in the method start. It is aliased to the inst-var parser defined in the superclass of PPCompositeParser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1455
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1456
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1457
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 6/4/2010 13:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1458
productionAt: aSymbol ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1459
	"Answer the production named aSymbol, if there is no such production answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1460
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1461
	(self class ignoredNames includes: aSymbol asString)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1462
		ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1463
	(self class startSymbol = aSymbol)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1464
		ifTrue: [ ^ parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1465
	^ self instVarAt: (self class allInstVarNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1466
		indexOf: aSymbol asString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1467
		ifAbsent: [ ^ aBlock value ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1468
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1469
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 5/8/2011 15:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1470
productionNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1471
	"Answer a dictionary of slot indexes and production names."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1472
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1473
	| productionNames ignoredNames |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1474
	productionNames := Dictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1475
	ignoredNames := self class ignoredNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1476
		collect: [ :each | each asSymbol ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1477
	self class allInstVarNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1478
		(ignoredNames includes: value asSymbol)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1479
			ifFalse: [ productionNames at: key put: value asSymbol ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1480
	^ productionNames!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1481
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1482
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 3/16/2013 21:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1483
dependencyAt: aClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1484
	"Answer the dependent parser aClass. Throws an error if this parser class is not declared in the method #dependencies on the class-side of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1485
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1486
	^ dependencies at: aClass ifAbsent: [ self error: ''Undeclared dependency in '' , self class name , '' to '' , aClass name ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1487
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1488
!!PPCompositeParser methodsFor: ''querying'' stamp: ''lr 12/4/2009 18:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1489
productionAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1490
	"Answer the production named aSymbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1491
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1492
	^ self productionAt: aSymbol ifAbsent: [ nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1493
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1494
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1495
!!PPCompositeParser methodsFor: ''initialization'' stamp: ''lr 3/16/2013 17:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1496
initializeStartingAt: aSymbol dependencies: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1497
	self initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1498
	parser := PPDelegateParser named: aSymbol.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1499
	self productionNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1500
		self instVarAt: key put: (PPDelegateParser named: value) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1501
	dependencies := aDictionary!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1502
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1503
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1504
!!PPCompositeParser methodsFor: ''accessing'' stamp: ''lr 5/16/2008 17:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1505
start
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1506
	"Answer the production to start this parser with."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1507
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1508
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1509
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1510
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1511
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1512
PPCompositeParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1513
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1514
!!PPCompositeParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1515
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1516
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1517
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1518
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 1/29/2010 11:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1519
ignoredNames
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1520
	"Answer a collection of instance-variables that should not be automatically initialized with productions, but that are used internal to the composite parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1521
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1522
	^ PPCompositeParser allInstVarNames!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1523
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1524
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 12/7/2009 08:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1525
startSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1526
	"Answer the method that represents the default start symbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1527
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1528
	^ #start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1529
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1530
!!PPCompositeParser class methodsFor: ''accessing'' stamp: ''lr 3/16/2013 21:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1531
dependencies
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1532
	"Answer a collection of PPCompositeParser classes that this parser directly dependends on. Override this method in subclasses to declare dependent parsers. The default implementation does not depend on other PPCompositeParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1533
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1534
	^ #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1535
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1536
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1537
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1538
debug: anObject startingAt: aSymbol onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1539
	^ (self newStartingAt: aSymbol) debug: anObject onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1540
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1541
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1542
debug: anObject startingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1543
	^ (self newStartingAt: aSymbol) debug: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1544
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1545
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1546
debug: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1547
	^ self debug: anObject startingAt: self startSymbol onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1548
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1549
!!PPCompositeParser class methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 12/19/2013 15:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1550
debug: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1551
	^ self debug: anObject startingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1552
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1553
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1554
!!PPCompositeParser class methodsFor: ''instance creation'' stamp: ''lr 3/16/2013 21:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1555
newStartingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1556
	"Answer a new parser starting at aSymbol. The code makes sure to resolve all dependent parsers correctly."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1557
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1558
	| parsers remaining |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1559
	parsers := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1560
	remaining := OrderedCollection with: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1561
	[ remaining isEmpty ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1562
		| dependency |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1563
		dependency := remaining removeLast.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1564
		(parsers includesKey: dependency) ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1565
			parsers at: dependency put: dependency basicNew.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1566
			remaining addAll: dependency dependencies ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1567
	parsers keysAndValuesDo: [ :class :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1568
		| dependencies |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1569
		dependencies := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1570
		class dependencies 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1571
			do: [ :dependency | dependencies at: dependency put: (parsers at: dependency) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1572
		parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1573
			initializeStartingAt: (class == self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1574
				ifTrue: [ aSymbol ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1575
				ifFalse: [ class startSymbol ]) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1576
			dependencies: dependencies ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1577
	parsers keysAndValuesDo: [ :class :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1578
		parser setParser: (parser perform: parser children first name).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1579
		parser productionNames keysAndValuesDo: [ :key :value |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1580
			(parser instVarAt: key) setParser: (parser perform: value) ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1581
	^ parsers at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1582
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1583
!!PPCompositeParser class methodsFor: ''instance creation'' stamp: ''lr 12/7/2009 08:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1584
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1585
	"Answer a new parser starting at the default start symbol."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1586
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1587
	^ self newStartingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1588
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1589
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1590
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1591
parse: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1592
	^ self parse: anObject startingAt: self startSymbol onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1593
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1594
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1595
parse: anObject startingAt: aSymbol onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1596
	^ (self newStartingAt: aSymbol) parse: anObject onError: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1597
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1598
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1599
parse: anObject startingAt: aSymbol
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1600
	^ (self newStartingAt: aSymbol) parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1601
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1602
!!PPCompositeParser class methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1603
parse: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1604
	^ self parse: anObject startingAt: self startSymbol!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1605
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1606
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1607
PPParser subclass: #PPUnresolvedParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1608
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1609
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1610
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1611
	category: ''PetitParser-Tools''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1612
!!PPUnresolvedParser commentStamp: ''lr 11/28/2009 18:50'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1613
This is a temporary placeholder or forward reference to a parser that has not been defined yet. If everything goes well it will eventually be replaced with the real parser instance.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1614
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1615
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1616
!!PPUnresolvedParser methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1617
parseOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1618
	self error: self printString , '' need to be resolved before execution.''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1619
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1620
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1621
!!PPUnresolvedParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1622
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1623
	^ Color red!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1624
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1625
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1626
!!PPUnresolvedParser methodsFor: ''testing'' stamp: ''lr 10/27/2008 11:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1627
isUnresolved
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1628
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1629
Object subclass: #PPParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1630
	instanceVariableNames: ''properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1631
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1632
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1633
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1634
!!PPParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1635
An abstract parser for all parsers in PetitParser. Subclasses implement #parseOn: to perform the actual recursive-descent parsing. All parsers support a variety of methods to perform an actual parse, see the methods in the #parsing protocol. Parsers are combined with a series of operators that can be found in the #operations protocol.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1636
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1637
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1638
	properties	<Dictionary>	Stores additional state in the parser object.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1639
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1640
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1641
!!PPParser methodsFor: ''*petitjava-operations'' stamp: ''sback 9/2/2010 23:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1642
javaToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1643
	^ PPJavaTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1644
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1645
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1646
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 12/18/2013 06:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1647
gtInspectorParserInspectorIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1648
	<gtInspectorPresentationOrder: 30>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1649
	composite custom: (
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1650
		PPVerticalParserInspector new 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1651
			title: ''Sampler'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1652
			startOn: self)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1653
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1654
!!PPParser methodsFor: ''*petitgui'' stamp: ''AlexandreBergel 12/18/2013 16:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1655
gtGraphViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1656
	<gtInspectorPresentationOrder: 50>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1657
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1658
	composite roassal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1659
		title: ''Graph''; 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1660
		painting: [ :view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1661
			self visualizeStructureInGraphOn: view.	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1662
		].!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1663
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1664
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 6/24/2013 23:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1665
gtNamedTreeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1666
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1667
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1668
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1669
		title: ''Named Tree'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1670
		children: [:n | n namedChildren ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1671
		format: [:n| n name ifNil: [ n asString ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1672
		shouldExpandToLevel: 3!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1673
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1674
!!PPParser methodsFor: ''*petitgui'' stamp: ''TudorGirba 6/24/2013 23:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1675
gtTreeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1676
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1677
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1678
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1679
			title: ''Tree'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1680
			children: [:n | n children ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1681
			format: [:n| n name ifNil: [ n asString ] ifNotNil: [n name] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1682
			shouldExpandToLevel: 6!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1683
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1684
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1685
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 1/30/2013 19:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1686
morphicShapeDefault
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1687
	^ self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1688
		addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1689
			addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1690
			addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1691
				makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1692
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1693
		addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1694
			borderWidth: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1695
			layoutInset: 3;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1696
			color: Color white;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1697
			addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1698
				contents: self displayName;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1699
				color: self displayColor;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1700
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1701
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1702
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1703
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1704
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 10:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1705
morphicProduction
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1706
	^ self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1707
		layoutInset: 4;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1708
		addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1709
			layoutInset: 4;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1710
			addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1711
				contents: self displayName;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1712
				emphasis: TextEmphasis bold emphasisCode;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1713
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1714
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1715
		addMorphBack: (self morphicShapeSeen: IdentitySet new depth: 0);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1716
		addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1717
			addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1718
			addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1719
				makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1720
			yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1721
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1722
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1723
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/13/2009 13:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1724
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1725
	^ self morphicShapeDefault!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1726
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1727
!!PPParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/13/2009 13:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1728
morphicShapeSeen: aSet depth: anInteger do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1729
	" avoid recursion "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1730
	(aSet includes: self)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1731
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1732
	" display nice name when possible "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1733
	(anInteger > 0 and: [ self name notNil ]) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1734
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1735
	" don''t do it too deep "
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1736
	(anInteger > 10)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1737
		ifTrue: [ ^ self morphicShapeDefault ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1738
	aSet add: self. 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1739
	^ aBlock value: [ :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1740
		parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1741
			morphicShapeSeen: aSet 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1742
			depth: anInteger + 1 ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1743
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1744
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1745
!!PPParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 10/30/2010 11:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1746
transform: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1747
	"Answer a copy of all parsers reachable from the receiver transformed using aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1748
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1749
	| mapping root |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1750
	mapping := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1751
	self allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1752
		mapping
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1753
			at: each
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1754
			put: (aBlock value: each copy) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1755
	root := mapping at: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1756
	[	| changed |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1757
		changed := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1758
		root allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1759
			each children do: [ :old |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1760
				mapping at: old ifPresent: [ :new |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1761
					each replace: old with: new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1762
					changed := true ] ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1763
		changed ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1764
	^ root!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1766
!!PPParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/13/2010 09:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1767
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1768
	"Replace the references of the receiver pointing to aParser with anotherParser."!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1769
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1770
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1771
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1772
namedChildrenDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1773
	"Iterate over the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1774
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1775
	self namedChildrenDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1776
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1777
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1778
allNamedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1779
	"Answer all the named parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1780
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1781
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1782
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1783
	self allNamedParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1784
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1785
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1786
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1787
namedChildrenDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1788
	"Iterate over the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1789
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1790
	self children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1791
		(aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1792
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1793
		aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1794
		each name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1795
			ifTrue: [ each namedChildrenDo: aBlock seen: aSet ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1796
			ifFalse: [ aBlock value: each ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1797
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1798
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1799
innerChildren
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1800
	"Answer the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1801
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1802
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1803
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1804
	self innerChildrenDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1805
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1806
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1807
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1808
innerChildrenDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1809
	"Iterate over the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1810
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1811
	self children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1812
		(aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1813
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1814
		aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1815
		each name isNil ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1816
			aBlock value: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1817
			each innerChildrenDo: aBlock seen: aSet ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1818
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1819
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 12/3/2010 16:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1820
innerChildrenDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1821
	"Iterate over the inner children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1822
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1823
	self innerChildrenDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1824
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1825
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1826
allNamedParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1827
	"Iterate over all the named parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1828
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1829
	self allParsersDo: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1830
		each name notNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1831
			ifTrue: [ aBlock value: each ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1832
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1833
!!PPParser methodsFor: ''*petitanalyzer-named'' stamp: ''lr 11/23/2010 10:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1834
namedChildren
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1835
	"Answer the named children of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1836
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1837
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1838
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1839
	self namedChildrenDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1840
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1841
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1842
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1843
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1844
trimBlanks
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1845
	"Answer a new parser that consumes blanks before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1846
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1847
	^ self trim: #blank asParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1848
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1849
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 2/19/2010 07:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1850
answer: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1851
	"Answer a new parser that always returns anObject from a successful parse."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1852
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1853
	^ self ==> [ :nodes | anObject ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1854
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1855
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1856
trim: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1857
	"Answer a new parser that consumes and ignores aParser repeatedly before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1858
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1859
	^ PPTrimmingParser on: self trimmer: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1860
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1861
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/6/2011 20:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1862
map: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1863
	"Answer a new parser that works on the receiving sequence an passes in each element as a block argument."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1864
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1865
	^ aBlock numArgs = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1866
		ifTrue: [ self ==> aBlock ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1867
		ifFalse: [ self error: aBlock numArgs asString , '' arguments expected.'' ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1868
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1869
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1870
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 6/29/2010 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1871
token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1872
	"Answer a new parser that transforms the input to a token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1873
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1874
	^ PPTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1875
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1876
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/3/2011 14:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1877
foldRight: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1878
	"Answer a new parser that that folds the result of the receiver from right-to-left into aBlock. The argument aBlock must take two or more arguments."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1879
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1880
	| size args |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1881
	size := aBlock numArgs.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1882
	args := Array new: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1883
	^ self ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1884
		args at: size put: nodes last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1885
		nodes size - size + 1 to: 1 by: 1 - size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1886
			args
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1887
				replaceFrom: 1 to: size - 1 with: nodes startingAt: index;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1888
				at: size put: (aBlock valueWithArguments: args) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1889
		args at: size ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1890
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1891
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/11/2011 11:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1892
trimSpaces
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1893
	"Answer a new parser that consumes spaces before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1894
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1895
	^ self trim: #space asParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1896
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1897
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/15/2008 16:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1898
flatten
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1899
	"Answer a new parser that flattens the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1900
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1901
	^ PPFlattenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1902
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1903
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 7/31/2010 12:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1904
trim
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1905
	"Answer a new parser that consumes spaces before and after the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1906
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1907
	^ self trimSpaces!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1908
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1909
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 6/12/2010 10:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1910
>=> aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1911
	"Answer a new parser that wraps the receiving parser with a two argument block. The first argument is the parsed stream, the second argument a continuation block on the delegate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1912
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1913
	^ PPWrappingParser on: self block: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1914
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1915
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 5/12/2010 20:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1916
==> aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1917
	"Answer a new parser that performs aBlock as action handler on success."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1918
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1919
	^ PPActionParser on: self block: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1920
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1921
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/3/2011 15:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1922
foldLeft: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1923
	"Answer a new parser that that folds the result of the receiver from left-to-right into aBlock. The argument aBlock must take two or more arguments."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1924
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1925
	| size args |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1926
	size := aBlock numArgs.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1927
	args := Array new: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1928
	^ self ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1929
		args at: 1 put: nodes first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1930
		2 to: nodes size by: size - 1 do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1931
			args
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1932
				replaceFrom: 2 to: size with: nodes startingAt: index;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1933
				at: 1 put: (aBlock valueWithArguments: args) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1934
		args first ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1935
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1936
!!PPParser methodsFor: ''operators-mapping'' stamp: ''lr 4/6/2010 19:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1937
token: aTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1938
	"Answer a new parser that transforms the input to a token of class aTokenClass."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1939
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1940
	^ self token tokenClass: aTokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1941
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1942
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1943
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1944
max: anInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1945
	"Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1946
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1947
	^ (self starLazy: aParser) setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1948
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1949
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1950
starLazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1951
	"Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1952
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1953
	^ PPLazyRepeatingParser on: self limit: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1954
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1955
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 9/15/2010 09:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1956
times: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1957
	"Answer a new parser that parses the receiver exactly anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1958
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1959
	^ self min: anInteger max: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1960
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1961
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1962
min: aMinInteger max: aMaxInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1963
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1964
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1965
	^ (self starGreedy: aParser) setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1966
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1967
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1968
star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1969
	"Answer a new parser that parses the receiver zero or more times. This is a greedy and blind implementation that tries to consume as much input as possible and it does not consider what comes afterwards."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1970
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1971
	^ PPPossessiveRepeatingParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1972
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1973
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1974
min: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1975
	"Answer a new parser that parses the receiver at least anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1976
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1977
	^ self star setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1978
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1979
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1980
min: aMinInteger max: aMaxInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1981
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1982
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1983
	^ self star setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1984
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1985
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/2/2011 10:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1986
starGreedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1987
	"Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1988
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1989
	^ PPGreedyRepeatingParser on: self limit: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1990
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1991
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1992
min: aMinInteger max: aMaxInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1993
	"Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1994
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1995
	^ (self starLazy: aParser) setMin: aMinInteger; setMax: aMaxInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1996
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1997
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1998
min: anInteger lazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  1999
	"Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2000
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2001
	^ (self starLazy: aParser) setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2002
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2003
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2004
max: anInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2005
	"Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2006
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2007
	^ (self starGreedy: aParser) setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2008
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2009
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2010
plus
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2011
	"Answer a new parser that parses the receiver one or more times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2012
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2013
	^ self star setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2014
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2015
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/3/2011 14:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2016
min: anInteger greedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2017
	"Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2018
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2019
	^ (self starGreedy: aParser) setMin: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2020
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2021
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2022
max: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2023
	"Answer a new parser that parses the receiver at most anInteger times."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2024
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2025
	^ self star setMax: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2026
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2027
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2028
plusGreedy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2029
	"Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2030
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2031
	^ (self starGreedy: aParser) setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2032
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2033
!!PPParser methodsFor: ''operators-repeating'' stamp: ''lr 4/1/2011 21:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2034
plusLazy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2035
	"Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2036
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2037
	^ (self starLazy: aParser) setMin: 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2038
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2039
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2040
!!PPParser methodsFor: ''*petitsmalltalk-operations'' stamp: ''lr 6/29/2010 14:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2041
smalltalkToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2042
	^ PPSmalltalkTokenParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2043
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2044
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2045
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 5/22/2010 10:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2046
isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2047
	"Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2048
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2049
	^ self children isEmpty!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2050
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2051
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''JanKurs 5/31/2013 11:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2052
isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2053
	"Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2054
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2055
	^ self children isEmpty!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2056
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2057
!!PPParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 11/12/2009 17:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2058
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2059
	"Answer true if the receiver is a nullable parser, e.g. it can successfully parse nothing."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2060
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2061
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2062
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2063
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2064
!!PPParser methodsFor: ''converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2065
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2066
	"Answer the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2067
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2068
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2069
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2070
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2071
!!PPParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2072
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2073
	self name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2074
		ifTrue: [ aStream print: self hash ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2075
		ifFalse: [ aStream nextPutAll: self name ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2076
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2077
!!PPParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2078
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2079
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2080
	aStream nextPut: $(.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2081
	self printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2082
	aStream nextPut: $)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2083
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2084
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2085
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2086
example
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2087
	^ String streamContents: [ :stream | self exampleOn: stream ] limitedTo: 1024!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2088
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2089
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2090
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2091
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2092
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 9/12/2011 18:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2093
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2094
	^ self isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2095
		ifTrue: [ Color r: 0.5 g: 0.0 b: 0.5 ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2096
		ifFalse: [ Color blue ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2097
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2098
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2099
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2100
	^ self name isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2101
		ifFalse: [ self name asString ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2102
		ifTrue: [ self class name asString ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2103
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2104
!!PPParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2105
backgroundForDepth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2106
	^ Color gray: 1.0 - (anInteger / 20.0)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2107
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2108
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2109
!!PPParser methodsFor: ''parsing'' stamp: ''lr 10/29/2010 17:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2110
parse: anObject onError: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2111
	"Parse anObject with the receiving parser and answer the parse-result or answer the result of evaluating aBlock. Depending on the number of arguments of the block it is simply evaluated, evaluated with the failure object, or evaluated with the error message and position."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2112
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2113
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2114
	result := self parse: anObject.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2115
	result isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2116
		ifFalse: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2117
	aBlock numArgs = 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2118
		ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2119
	aBlock numArgs = 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2120
		ifTrue: [ ^ aBlock value: result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2121
	^ aBlock value: result message value: result position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2122
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2123
!!PPParser methodsFor: ''parsing'' stamp: ''lr 6/4/2011 18:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2124
matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2125
	"Search anObject repeatedly for the matches of the receiver. Answered an OrderedCollection of the matched parse-trees."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2126
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2127
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2128
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2129
	self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2130
		matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2131
		do: [ :each | result addLast: each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2132
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2133
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2134
!!PPParser methodsFor: ''parsing'' stamp: ''lr 8/16/2011 07:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2135
matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2136
	"Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of the matched parse-trees. Skip over matches."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2137
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2138
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2139
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2140
	self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2141
		matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2142
		do: [ :each | result addLast: each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2143
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2144
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2145
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/25/2013 23:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2146
matchingSkipRangesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2147
	"Search anObject repeatedly for the matches of the receiver. Skip over matches. Evaluate aBlock with the range of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2148
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2149
	self token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2150
		matchesSkipIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2151
		do: [ :token | aBlock value: (token start to: token stop) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2152
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2153
!!PPParser methodsFor: ''parsing'' stamp: ''DamienCassou 10/29/2011 19:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2154
matchingSkipRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2155
	"Search anObject repeatedly for the matches of the receiver. Skip over matches. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2156
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2157
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2158
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2159
	self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2160
		matchingSkipRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2161
		do: [ :value | result addLast: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2162
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2163
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2164
!!PPParser methodsFor: ''parsing'' stamp: ''lr 6/4/2011 18:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2165
matchingRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2166
	"Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2167
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2168
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2169
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2170
	self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2171
		matchingRangesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2172
		do: [ :value | result addLast: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2173
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2174
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2175
!!PPParser methodsFor: ''parsing'' stamp: ''lr 8/16/2011 07:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2176
matchesSkipIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2177
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Skip over matches."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2178
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2179
	(self ==> aBlock / #any asParser) star parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2180
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2181
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/25/2013 23:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2182
matchingRangesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2183
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock with the range of each match (index of first character to: index of last character)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2184
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2185
	self token
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2186
		matchesIn: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2187
		do: [ :token | aBlock value: (token start to: token stop) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2188
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2189
!!PPParser methodsFor: ''parsing'' stamp: ''lr 2/8/2010 00:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2190
matches: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2191
	"Answer if anObject can be parsed by the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2192
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2193
	^ (self parse: anObject) isPetitFailure not!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2194
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2195
!!PPParser methodsFor: ''parsing'' stamp: ''lr 3/1/2010 21:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2196
matchesIn: anObject do: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2197
	"Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Make sure to always consume exactly one character with each step, to not miss any match."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2198
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2199
	((self and ==> aBlock , #any asParser) / #any asParser) star parse: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2200
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2202
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 5/31/2010 18:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2203
matchList: matchList index: matchIndex against: parserList index: parserIndex inContext: aDictionary seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2204
	| parser currentIndex currentDictionary currentSeen parsers |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2205
	matchList size < matchIndex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2206
		ifTrue: [ ^ parserList size < parserIndex ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2207
	parser := matchList at: matchIndex.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2208
	parser class = PPListPattern ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2209
		currentIndex := parserIndex - 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2210
		[ currentDictionary := aDictionary copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2211
		currentSeen := aSet copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2212
		parserList size < currentIndex or: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2213
			parsers := parserList copyFrom: parserIndex to: currentIndex.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2214
			(currentDictionary at: parser ifAbsentPut: [ parsers ]) = parsers and: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2215
				(self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2216
					matchList: matchList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2217
					index: matchIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2218
					against: parserList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2219
					index: currentIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2220
					inContext: currentDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2221
					seen: currentSeen)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2222
					ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2223
						currentDictionary keysAndValuesDo: [ :key :value | aDictionary at: key put: value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2224
						^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2225
				false ] ] ] whileFalse: [ currentIndex := currentIndex + 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2226
		^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2227
	parserList size < parserIndex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2228
		ifTrue: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2229
	(parser match: (parserList at: parserIndex) inContext: aDictionary seen: aSet)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2230
		ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2231
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2232
		matchList: matchList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2233
		index: matchIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2234
		against: parserList
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2235
		index: parserIndex + 1
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2236
		inContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2237
		seen: aSet!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2238
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2239
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 7/17/2011 11:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2240
copyInContext: aDictionary seen: aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2241
	| copy |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2242
	aSeenDictionary 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2243
		at: self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2244
		ifPresent: [ :value | ^ value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2245
	copy := aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2246
		at: self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2247
		put: self copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2248
	copy children do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2249
		copy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2250
			replace: each
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2251
			with: (each copyInContext: aDictionary seen: aSeenDictionary) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2252
	^ copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2253
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2254
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 07:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2255
copyInContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2256
	^ self copyInContext: aDictionary seen: IdentityDictionary new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2257
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2258
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/29/2010 23:07''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2259
matchList: matchList against: parserList inContext: aDictionary seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2260
	^ self matchList: matchList index: 1 against: parserList index: 1 inContext: aDictionary seen: aSet!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2261
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2262
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2263
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2264
	"This is the default implementation to match two parsers. This code can properly handle recursion. This is code is supposed to be overridden in subclasses that add new state."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2265
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2266
	(self == aParser or: [ anIdentitySet includes: self ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2267
		ifTrue: [ ^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2268
	anIdentitySet add: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2269
	^ self class = aParser class and: [ self matchList: self children against: aParser children inContext: aDictionary seen: anIdentitySet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2270
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2271
!!PPParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/29/2010 23:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2272
match: aParser inContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2273
	^ self match: aParser inContext: aDictionary seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2274
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2275
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2276
!!PPParser methodsFor: ''testing'' stamp: ''lr 10/27/2008 11:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2277
isUnresolved
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2278
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2279
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2280
!!PPParser methodsFor: ''testing'' stamp: ''lr 8/6/2010 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2281
isPetitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2282
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2283
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2284
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2285
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2286
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2287
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2288
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2289
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2290
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2291
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2292
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2293
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2294
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2295
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2296
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2297
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2298
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2299
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2300
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2301
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2302
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2303
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2304
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2305
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2306
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2307
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2308
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2309
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2310
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2311
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2312
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2313
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2314
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2315
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2316
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2317
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2318
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2319
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2320
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2321
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2322
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2323
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2324
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2325
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2326
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2327
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2328
!!PPParser methodsFor: ''accessing-properties'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2329
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2330
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2331
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2332
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2333
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2334
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2335
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2336
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2337
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2338
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2339
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2340
visualizeStructureInGraphOn: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2341
	view shape rectangle 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2342
		borderWidth: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2343
		if: [ :p | p name isNil ] fillColor: Color lightGray.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2344
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2345
	view interaction
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2346
		item: ''Explore'' action: #explore;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2347
		highlightWhenOver: [ :p | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2348
			self allParsers select: [ :ch | ch children includes: p ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2349
		] color: Color orange muchLighter;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2350
		highlightWhenOver: [ :p | |children|
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2351
			children := p namedChildren.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2352
		] color: Color orange muchDarker;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2353
		highlightWhenOver: [ :p | Array with: p ] color: Color orange;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2354
		popupText: [:p | p class name asString ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2355
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2356
	view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2357
		nodes: self allParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2358
		forEach: [ :aParser | |labels|
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2359
			labels := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2360
			aParser name notNil ifTrue: [ labels add: aParser name ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2361
			aParser visualizationGraphType notNil ifTrue: [ labels add: aParser visualizationGraphType ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2362
			labels isEmpty ifFalse: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2363
					view shape label.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2364
					view interaction forwarder.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2365
					view nodes: labels asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2366
		].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2367
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2368
	view shape: (ROLine new add: (ROArrow new size: 4) offset: 0.1).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2369
	view edgesToAll: #children.	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2370
	view treeLayout
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2371
		layered;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2372
		on: ROLayoutEnd do: [ :evt | ROFocusView on: (view raw elementFromModel: self) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2373
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2374
	view zoomInButton.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2375
	view zoomOutButton.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2376
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2377
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''tg 8/25/2010 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2378
namedParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2379
    self namedParsersDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2380
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2381
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''VincentBlondeau 2/14/2014 17:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2382
viewAllNamedParsersWithSelection: aCollectionOfNames previewing: aBlock on: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2383
	view shape label
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2384
		color: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2385
					(aCollectionOfNames includes: each name)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2386
						ifFalse: [ Color black ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2387
						ifTrue: [ Color red ] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2388
		text: [ :each | each displayName ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2389
	view interaction popupText: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2390
	view interaction item: ''Explore'' action: #explore.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2391
	view nodes: (self allParsers reject: [ :each | each name isEmptyOrNil ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2392
	view edges: (self allParsers reject: [ :each | each name isEmptyOrNil ]) from: #yourself toAll: #namedParsers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2393
	view horizontalDominanceTreeLayout
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2394
		verticalGap: 10;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2395
		layered!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2396
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2397
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2398
visualizeStructureInGraph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2399
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2400
	"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2401
	PPSmalltalkParser new visualize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2402
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2403
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2404
	"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2405
	| view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2406
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2407
	view := ROMondrianViewBuilder new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2408
	self visualizeStructureInGraphOn: view.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2409
	view open.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2410
	^ view!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2411
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2412
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''VincentBlondeau 2/14/2014 17:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2413
viewAllNamedParsersOn: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2414
	view shape
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2415
		rectangleWithoutBorder;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2416
		withText: #displayName.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2417
	view nodes: (self allParsers reject: [ :each | each name isEmptyOrNil ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2418
	view edgesToAll: #namedParsers.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2419
	view horizontalDominanceTreeLayout layered!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2421
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 12/6/2011 07:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2422
viewAllNamedParsersWithSelection: aCollectionOfNames on: view
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2423
	self viewAllNamedParsersWithSelection: aCollectionOfNames previewing: [ :each | each name ] on: view!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2424
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2425
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 12/14/2011 12:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2426
namedParsersDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2427
    self children do: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2428
        (aSet includes: each)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2429
            ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2430
		        aSet add: each.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2431
		        each name isEmptyOrNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2432
		            ifFalse: [ aBlock value: each ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2433
		            ifTrue: [ each namedParsersDo: aBlock seen: aSet ] ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2434
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2435
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''TudorGirba 6/5/2013 23:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2436
viewAllNamedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2437
	| view |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2438
	view := ROMondrianViewBuilder new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2439
	self viewAllNamedParsersOn: view.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2440
	^ view open setLabel: ''All named parsers''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2441
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2442
!!PPParser methodsFor: ''*petitgui-mondrian'' stamp: ''tg 8/25/2010 00:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2443
namedParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2444
    | result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2445
    result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2446
    self namedParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2447
    ^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2448
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2449
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2450
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2451
allParsers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2452
	"Answer all the parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2453
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2454
	| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2455
	result := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2456
	self allParsersDo: [ :parser | result addLast: parser ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2457
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2458
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2459
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2460
allParsersDo: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2461
	"Iterate over all the parse nodes of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2462
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2463
	self allParsersDo: aBlock seen: IdentitySet new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2464
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2465
!!PPParser methodsFor: ''*petitanalyzer-enumerating'' stamp: ''lr 4/13/2010 08:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2466
allParsersDo: aBlock seen: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2467
	"Iterate over all the parse nodes of the receiver, do not visit and follow the ones contained in aSet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2468
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2469
	(aSet includes: self)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2470
		ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2471
	aSet add: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2472
	aBlock value: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2473
	self children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2474
		do: [ :each | each allParsersDo: aBlock seen: aSet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2475
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2476
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2477
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/19/2010 07:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2478
separatedBy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2479
	"Answer a new parser that parses the receiver one or more times, separated by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2480
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2481
	^ (PPSequenceParser with: self with: (PPSequenceParser with: aParser with: self) star) ==> [ :nodes |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2482
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2483
		result := Array new: 2 * nodes second size + 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2484
		result at: 1 put: nodes first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2485
		nodes second 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2486
			keysAndValuesDo: [ :index :pair | result replaceFrom: 2 * index to: 2 * index + 1 with: pair startingAt: 1 ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2487
		result ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2488
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2489
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/19/2010 07:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2490
delimitedBy: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2491
	"Answer a new parser that parses the receiver one or more times, separated and possibly ended by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2492
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2493
	^ (self separatedBy: aParser) , (aParser optional) ==> [ :node |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2494
		node second isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2495
			ifTrue: [ node first ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2496
			ifFalse: [ node first copyWith: node second ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2497
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2498
!!PPParser methodsFor: ''operators-convenience'' stamp: ''lr 2/25/2012 16:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2499
withoutSeparators
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2500
	"Filters out the separators from a parse result produced by one of the productions #delimitedBy: or #separatedBy:."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2501
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2502
	^ self ==> [ :items |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2503
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2504
		result := Array new: items size + 1 // 2.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2505
		1 to: result size do: [ :index | result at: index put: (items at: 2 * index - 1) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2506
		result ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2507
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2508
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2509
!!PPParser methodsFor: ''copying'' stamp: ''lr 4/19/2010 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2510
postCopy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2511
	super postCopy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2512
	properties := properties copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2513
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2514
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2515
!!PPParser methodsFor: ''initialization'' stamp: ''lr 4/24/2008 10:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2516
initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2517
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2518
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2519
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 21:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2520
newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2521
	^ AlignmentMorph newColumn
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2522
		cellPositioning: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2523
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2524
		listCentering: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2525
		vResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2526
		hResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2527
		layoutInset: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2528
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2529
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2530
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 21:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2531
newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2532
	^ AlignmentMorph newRow
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2533
		cellPositioning: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2534
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2535
		listCentering: #topLeft;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2536
		vResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2537
		hResizing: #shrinkWrap;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2538
		layoutInset: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2539
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2540
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2541
!!PPParser methodsFor: ''*petitgui-morphic-creational'' stamp: ''lr 11/17/2009 22:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2542
newSpacerMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2543
	^ Morph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2544
		color: Color transparent;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2545
		borderWidth: 0;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2546
		extent: 7 @ 7;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2547
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2548
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2549
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2550
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 9/16/2010 17:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2551
followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2552
	"Answer a dictionary with all the parsers reachable from the receiver as key and their follow-set as value. The follow-set of a parser is the list of terminal parsers that can appear immediately to the right of that parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2553
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2554
	| current previous continue firstSets followSets |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2555
	current := previous := 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2556
	firstSets := self firstSets.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2557
	followSets := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2558
	self allParsersDo: [ :each | followSets at: each put: IdentitySet new ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2559
	(followSets at: self) add: PPSentinel instance.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2560
	[	followSets keysAndValuesDo: [ :parser :follow |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2561
			parser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2562
				followSets: followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2563
				firstSets: firstSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2564
				into: follow ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2565
		current := followSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2566
			inject: 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2567
			into: [ :result :each | result + each size ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2568
		continue := previous < current.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2569
		previous := current.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2570
		continue ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2571
	^ followSets!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2572
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2573
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 10/22/2009 19:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2574
firstSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2575
	"Answer the first-set of the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #firstSets to calculate the first-sets at once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2576
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2577
	^ self firstSets at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2578
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2579
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 11/19/2009 23:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2580
cycleSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2581
	"Answer a set of all nodes that are within one or more cycles of left-recursion. This is generally not a problem if at least one of the nodes is memoized, but it might make the grammar very inefficient and should be avoided if possible."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2582
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2583
	| cycles |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2584
	cycles := IdentitySet new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2585
	self cycleSet: OrderedCollection new firstSets: self firstSets into: cycles.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2586
	^ cycles!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2587
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2588
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''JanKurs 5/31/2013 11:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2589
firstSets
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2590
	"Answer a dictionary with all the parsers reachable from the receiver as key and their first-set as value. The first-set of a parser is the list of terminal parsers that begin the parser derivable from that parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2591
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2592
	| firstSets |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2593
	firstSets := IdentityDictionary new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2594
	self allParsersDo: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2595
		firstSets at: each put: (each isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2596
			ifTrue: [ IdentitySet with: each ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2597
			ifFalse: [ IdentitySet new ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2598
		each isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2599
			ifTrue: [ (firstSets at: each) add: PPSentinel instance ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2600
	[	| changed tally |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2601
		changed := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2602
		firstSets keysAndValuesDo: [ :parser :first |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2603
			tally := first size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2604
			parser firstSets: firstSets into: first.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2605
			changed := changed or: [ tally ~= first size ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2606
		changed ] whileTrue.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2607
	^ firstSets!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2608
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2609
!!PPParser methodsFor: ''*petitanalyzer-querying'' stamp: ''lr 11/12/2009 21:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2610
followSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2611
	"Answer the follow-set of the receiver starting at the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #followSets to calculate the follow-sets at once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2612
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2613
	^ self followSets at: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2614
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2615
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2616
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2617
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2618
	"Parse aStream with the receiving parser and answer the parse-result or an instance of PPFailure. Override this method in subclasses to specify custom parse behavior. Do not call this method from outside, instead use #parse:."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2619
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2620
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2621
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2622
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/17/2014 13:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2623
debugWithContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2624
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2625
	^ self enableDebug parseWithContext: aPPContext !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2626
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2627
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/11/2014 13:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2628
updateContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2629
	"nothing to do"!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2630
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2631
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2632
parse: anObject withContext: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2633
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2634
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2635
	aPPContext stream: anObject asPetitStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2636
	^ self parseWithContext: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2637
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2638
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2639
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2640
parse: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2641
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2642
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2643
	^ self parse: anObject withContext: PPContext new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2644
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2645
!!PPParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/19/2014 16:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2646
parseWithContext: context
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2647
	context root: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2648
	self updateContext: context.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2649
	^ self parseOn: context!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2651
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2652
!!PPParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2653
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2654
	"Answer a set of child parsers that could follow the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2655
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2656
	^ #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2657
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2658
!!PPParser methodsFor: ''accessing'' stamp: ''lr 4/19/2010 10:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2659
name: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2660
	self propertyAt: #name put: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2661
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2662
!!PPParser methodsFor: ''accessing'' stamp: ''lr 4/19/2010 10:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2663
name
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2664
	"Answer the production name of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2665
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2666
	^ self propertyAt: #name ifAbsent: [ nil ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2667
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2668
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2669
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/19/2009 23:47''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2670
cycleSet: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2671
	"PRIVATE: Answer the children that could be part of a cycle-set with the receiver, subclasses might restrict the number of children returned. aDictionary is pre-calcualted first-sets."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2672
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2673
	^ self children!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2674
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2675
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 5/22/2010 10:45''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2676
cycleSet: aStack firstSets: aDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2677
	"PRIVATE: Try to find a cycle, where aStack contains the previously visited parsers. The method returns quickly when the receiver is a terminal, terminals cannot be part of a cycle. If aStack already contains the receiver, then we are in a cycle. In this case we don''t process the children further and add the nodes to aSet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2678
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2679
	| index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2680
	self isTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2681
		ifTrue: [ ^ self ].	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2682
	(index := aStack indexOf: self) > 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2683
		ifTrue: [ ^ aSet addAll: (aStack copyFrom: index to: aStack size) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2684
	aStack addLast: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2685
	(self cycleSet: aDictionary)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2686
		do: [ :each | each cycleSet: aStack firstSets: aDictionary into: aSet ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2687
	aStack removeLast!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2688
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2689
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/12/2009 21:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2690
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2691
	"PRIVATE: Try to add additional elements to the first-set aSet of the receiver, use the incomplete aFirstDictionary."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2692
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2693
	self children do: [ :parser | aSet addAll: (aFirstDictionary at: parser) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2694
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2695
!!PPParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 11/12/2009 21:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2696
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2697
	"PRIVATE: Try to add additional elements to the follow-set aSet of the receiver, use the incomplete aFollowDictionary and the complete aFirstDictionary."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2698
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2699
	self children do: [ :parser | (aFollowDictionary at: parser) addAll: aSet ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2700
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2701
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2702
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 1/16/2014 15:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2703
debug: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2704
	"Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2705
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2706
	^ self enableDebug parse: anObject asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2707
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2708
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 12:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2709
enableDebuggerOutput 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2710
	self debuggerOutput: true.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2711
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2712
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 4/22/2013 18:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2713
debuggerOutput: aBoolean
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2714
	self propertyAt: #debuggerOutput put: aBoolean!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2715
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2716
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 12:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2717
disableDebuggerOutput 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2718
	self debuggerOutput: false.	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2719
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2720
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 3/18/2014 17:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2721
enableDebug
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2722
   | root newParser  |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2723
	root := PPParserDebuggerResult new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2724
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2725
	newParser := self transform: [:each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2726
		each >=> [:stream :continuation | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2727
			| result child |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2728
			child := PPParserDebuggerResult new 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2729
					parser: each;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2730
					parent: root.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2731
			root := root children add: child.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2732
 			child start: stream position + 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2733
			child showChildren: each debuggerOutput.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2734
			result := continuation value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2735
			child end: stream position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2736
			root result: result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2737
			root := root parent.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2738
			result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2739
		]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2740
	].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2741
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2742
	^ PPDebugParser on: newParser root: root.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2743
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2744
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2745
!!PPParser methodsFor: ''*petitgui-debug'' stamp: ''JanKurs 4/22/2013 18:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2746
debuggerOutput
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2747
	^ self propertyAt: #debuggerOutput ifAbsentPut: true.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2748
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2749
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2750
!!PPParser methodsFor: ''operators'' stamp: ''lr 2/19/2010 07:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2751
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2752
	"Answer a new parser consumes any input token but the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2753
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2754
	^ self not , #any asParser ==> #second!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2755
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2756
!!PPParser methodsFor: ''operators'' stamp: ''lr 9/1/2010 22:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2757
optional
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2758
	"Answer a new parser that parses the receiver, if possible."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2759
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2760
	^ PPOptionalParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2761
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2762
!!PPParser methodsFor: ''operators'' stamp: ''lr 12/3/2010 11:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2763
def: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2764
	"Redefine the receiver as the argument aParser. This method is useful when defining recursive parsers: instantiate a PPUnresolvedParser and later redefine it with another one."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2766
	^ self becomeForward: (aParser name: self name)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2767
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2768
!!PPParser methodsFor: ''operators'' stamp: ''lr 10/23/2008 14:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2769
wrapped
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2770
	"Answer a new parser that is simply wrapped."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2771
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2772
	^ PPDelegateParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2773
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2774
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 16:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2775
memoized
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2776
	"Answer a new memoized parser, for refraining redundant computations. This ensures polynomial time O(n^4) for left-recursive grammars and O(n^3) for non left-recursive grammars in the worst case. Not necessary for most grammars that are carefully written and in O(n) anyway."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2777
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2778
	^ PPMemoizedParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2779
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2780
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2781
and
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2782
	"Answer a new parser (logical and-predicate) that succeeds whenever the receiver does, but never consumes input."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2783
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2784
	^ PPAndParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2785
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2786
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/14/2010 11:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2787
/ aParser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2788
	"Answer a new parser that parses the receiver, if the receiver fails try with aParser (ordered-choice)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2789
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2790
	^ PPChoiceParser with: self with: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2791
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2792
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/30/2010 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2793
end
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2794
	"Answer a new parser that succeeds at the end of the input and return the result of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2795
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2796
	^ PPEndOfInputParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2797
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2798
!!PPParser methodsFor: ''operators'' stamp: ''lr 5/31/2010 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2799
not
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2800
	"Answer a new parser (logical not-predicate) that succeeds whenever the receiver fails, but never consumes input."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2801
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2802
	^ PPNotParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2803
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2804
!!PPParser methodsFor: ''operators'' stamp: ''lr 4/14/2010 11:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2805
| aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2806
	"Answer a new parser that either parses the receiver or aParser. Fail if both pass or fail (exclusive choice, unordered choice)."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2807
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2808
	^ (self not , aParser) / (aParser not , self) ==> #second!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2809
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2810
!!PPParser methodsFor: ''operators'' stamp: ''lr 9/23/2008 18:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2811
, aParser 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2812
	"Answer a new parser that parses the receiver followed by aParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2813
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2814
	^ PPSequenceParser with: self with: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2815
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2816
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2817
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2818
PPParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2819
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2820
!!PPParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2821
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2822
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2823
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2824
!!PPParser class methodsFor: ''instance creation'' stamp: ''lr 10/27/2008 11:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2825
named: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2826
	^ self new name: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2827
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2828
!!PPParser class methodsFor: ''instance creation'' stamp: ''lr 4/18/2008 14:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2829
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2830
	^ self basicNew initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2832
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2833
PPParser subclass: #PPPluggableParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2834
	instanceVariableNames: ''block''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2835
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2836
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2837
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2838
!!PPPluggableParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2839
A pluggable parser that passes the parser stream into a block. This enables users to perform manual parsing or to embed other parser frameworks into PetitParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2840
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2841
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2842
	block	<BlockClosure>	The pluggable one-argument block.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2843
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2844
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2845
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2846
!!PPPluggableParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2847
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2848
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2849
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2850
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2851
!!PPPluggableParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2852
initializeOn: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2853
	block := aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2854
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2855
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2856
!!PPPluggableParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2857
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2858
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2859
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2860
	result := block value: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2861
	result isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2862
		ifTrue: [ aPPContext restore: position ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2863
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2864
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2865
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2866
!!PPPluggableParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2867
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2868
	^ String streamContents: [ :stream | block decompile shortPrintOn: stream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2869
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2870
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2871
!!PPPluggableParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2872
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2873
	"Answer the pluggable block."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2874
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2875
	^ block!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2876
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2877
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2878
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2879
PPPluggableParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2880
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2881
!!PPPluggableParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2882
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2883
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2884
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2885
!!PPPluggableParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2886
on: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2887
	^ self new initializeOn: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2888
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2889
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2890
PPParser subclass: #PPFailingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2891
	instanceVariableNames: ''message''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2892
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2893
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2894
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2895
!!PPFailingParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2896
A parser that consumes nothing and always fails.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2897
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2898
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2899
	message <String>	The failure message.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2900
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2901
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2902
!!PPFailingParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 19:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2903
setMessage: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2904
	message := aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2905
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2906
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2907
!!PPFailingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2908
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2909
	^ PPFailure message: message context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2910
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2911
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2912
!!PPFailingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2913
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2914
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2916
!!PPFailingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2917
displayColor
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2918
	^ Color red!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2919
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2920
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2921
!!PPFailingParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 21:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2922
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2923
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2924
	aStream nextPutAll: '', ''; print: message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2925
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2926
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2927
!!PPFailingParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2928
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2929
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self message = aParser message ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2930
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2931
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2932
!!PPFailingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2933
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2934
	"Answer the error message of the receiving parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2935
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2936
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2937
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2938
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2939
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2940
PPFailingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2941
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2942
!!PPFailingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2943
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2944
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2945
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2946
!!PPFailingParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 19:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2947
message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2948
	^ self new setMessage: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2949
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2950
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2951
PPParser subclass: #PPLiteralParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2952
	instanceVariableNames: ''literal message''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2953
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2954
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2955
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2956
!!PPLiteralParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2957
Abstract literal parser that parses some kind of literal type (to be specified by subclasses).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2958
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2959
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2960
	literal	<Object>	The literal object to be parsed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2961
	message	<String>	The error message to be generated.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2962
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2963
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2964
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2965
!!PPLiteralParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 9/15/2010 12:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2966
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2967
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self literal = aParser literal and: [ self message = aParser message ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2968
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2969
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2970
!!PPLiteralParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 17:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2971
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2972
	^ literal printString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2973
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2974
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2975
!!PPLiteralParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2976
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2977
	^ literal printString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2978
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2979
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2980
!!PPLiteralParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2981
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2982
	"Answer the failure message."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2983
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2984
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2985
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2986
!!PPLiteralParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2987
literal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2988
	"Answer the parsed literal."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2989
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2990
	^ literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2991
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2992
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2993
!!PPLiteralParser methodsFor: ''operators'' stamp: ''lr 6/1/2010 22:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2994
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2995
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2996
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2997
	self subclassResponsibility!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2998
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  2999
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3000
!!PPLiteralParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 13:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3001
initializeOn: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3002
	literal := anObject.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3003
	message := aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3004
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3005
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3006
!!PPLiteralParser methodsFor: ''printing'' stamp: ''lr 4/16/2010 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3007
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3008
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3009
	aStream nextPutAll: '', ''; print: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3010
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3011
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3012
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3013
PPLiteralParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3014
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3015
!!PPLiteralParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3016
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3017
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3018
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3019
!!PPLiteralParser class methodsFor: ''instance creation'' stamp: ''lr 1/7/2010 15:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3020
on: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3021
	^ self new initializeOn: anObject message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3022
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3023
!!PPLiteralParser class methodsFor: ''instance creation'' stamp: ''lr 1/7/2010 15:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3024
on: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3025
	^ self on: anObject message: anObject printString , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3026
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3027
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3028
PPLiteralParser subclass: #PPLiteralObjectParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3029
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3030
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3031
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3032
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3033
!!PPLiteralObjectParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3034
A parser that accepts a single literal object, such as a character. This is the same as the predicate parser ''PPPredicateParser expect: literal'' but slightly more efficient.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3035
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3036
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3037
!!PPLiteralObjectParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3038
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3039
	aStream nextPut: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3040
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3041
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3042
!!PPLiteralObjectParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3043
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3044
	^ (aPPContext stream atEnd not and: [ literal = aPPContext stream uncheckedPeek ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3045
		ifFalse: [ PPFailure message: message context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3046
		ifTrue: [ aPPContext stream next ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3047
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3048
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3049
!!PPLiteralObjectParser methodsFor: ''operators'' stamp: ''lr 8/18/2010 20:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3050
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3051
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3052
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3053
	literal asUppercase = literal asLowercase ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3054
	^ PPPredicateObjectParser on: [ :value | literal sameAs: value ] message: message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3055
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3056
!!PPLiteralObjectParser methodsFor: ''operators'' stamp: ''lr 4/28/2011 20:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3057
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3058
	^ (PPPredicateObjectParser expect: literal message: message) negate!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3059
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3060
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3061
PPParser subclass: #PPPredicateParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3062
	instanceVariableNames: ''predicate predicateMessage negated negatedMessage''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3063
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3064
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3065
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3066
!!PPPredicateParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3067
An abstract parser that accepts if a given predicate holds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3068
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3069
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3070
	predicate	<BlockClosure>	The block testing for the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3071
	predicateMessage	<String>	The error message of the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3072
	negated	<BlockClosure>	The block testing for the negation of the predicate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3073
	negatedMessage	<String>	The error message of the negated predicate.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3074
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3075
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3076
!!PPPredicateParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 9/15/2010 11:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3077
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3078
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block and: [ self message = aParser message ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3079
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3080
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3081
!!PPPredicateParser methodsFor: ''printing'' stamp: ''lr 5/2/2010 13:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3082
printNameOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3083
	super printNameOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3084
	aStream nextPutAll: '', ''; print: predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3085
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3086
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3087
!!PPPredicateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/1/2010 17:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3088
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3089
	"Produce a random character that is valid. If there are characters in the alpha-numeric range prefer those over all others."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3090
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3091
	| valid normal |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3092
	valid := Character allCharacters
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3093
		select: [ :char | self matches: (String with: char) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3094
	normal := valid
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3095
		select: [ :char | char asInteger < 127 and: [ char isAlphaNumeric ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3096
	aStream nextPut: (normal isEmpty
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3097
		ifTrue: [ valid atRandom ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3098
		ifFalse: [ normal atRandom ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3099
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3100
!!PPPredicateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/2/2010 19:35''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3101
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3102
	^ predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3103
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3104
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3105
!!PPPredicateParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3106
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3107
	"Answer the failure message."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3108
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3109
	^ predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3110
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3111
!!PPPredicateParser methodsFor: ''accessing'' stamp: ''lr 5/2/2010 13:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3112
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3113
	"Answer the predicate block of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3114
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3115
	^ predicate!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3116
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3117
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3118
PPPredicateParser subclass: #PPPredicateObjectParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3119
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3120
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3121
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3122
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3123
!!PPPredicateObjectParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3124
A parser that accepts if a given predicate on one element of the input sequence holds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3125
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3126
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3127
!!PPPredicateObjectParser methodsFor: ''operators'' stamp: ''lr 6/12/2010 09:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3128
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3129
	"Answer a parser that is the negation of the receiving predicate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3130
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3131
	^ self class 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3132
		on: negated message: negatedMessage 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3133
		negated: predicate message: predicateMessage!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3134
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3135
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3136
!!PPPredicateObjectParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3137
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3138
	^ (aPPContext stream atEnd not and: [ predicate value: aPPContext stream uncheckedPeek ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3139
		ifFalse: [ PPFailure message: predicateMessage context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3140
		ifTrue: [ aPPContext stream next ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3141
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3142
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3143
!!PPPredicateObjectParser methodsFor: ''initialization'' stamp: ''lr 6/12/2010 09:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3144
initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3145
	predicate := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3146
	predicateMessage := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3147
	negated := aNegatedBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3148
	negatedMessage := aNegatedString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3149
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3150
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3151
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3152
PPPredicateObjectParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3153
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3154
!!PPPredicateObjectParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3155
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3156
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3157
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3158
!!PPPredicateObjectParser class methodsFor: ''*petitregex-chars'' stamp: ''lr 8/30/2010 14:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3159
control
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3160
	^ self chars: ((0 to: 31) collect: [ :each | Character value: each ]) message: ''control character expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3161
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3162
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3163
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3164
expect: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3165
	^ self expect: anObject message: anObject printString , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3166
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3167
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 4/1/2011 20:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3168
anyExceptAnyOf: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3169
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3170
		on: [ :each | (aCollection includes: each) not ] message: ''any except '' , aCollection printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3171
		negated: [ :each | aCollection includes: each ] message: aCollection printString ,  '' not expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3172
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3173
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 4/1/2011 20:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3174
anyOf: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3175
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3176
		on: [ :each | aCollection includes: each ] message: ''any of '' , aCollection printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3177
		negated: [ :each | (aCollection includes: each) not ] message: ''none of '' , aCollection printString ,  ''expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3178
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3179
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3180
any
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3181
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3182
		on: [ :each | true ] message: ''input expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3183
		negated: [ :each | false ] message: ''no input expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3184
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3185
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3186
between: min and: max
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3187
	^ self
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3188
		on: [ :each | each >= min and: [ each <= max ] ] message: min printString , ''..'' , max printString , '' expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3189
		negated: [ :each | each < min or: [ each > max ] ] message: min printString , ''..'' , max printString , '' not expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3190
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3191
!!PPPredicateObjectParser class methodsFor: ''factory-objects'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3192
expect: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3193
	^ self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3194
		on: [ :each | each = anObject ] message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3195
		negated: [ :each | each ~= anObject ] message: ''no '' , aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3196
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3197
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3198
!!PPPredicateObjectParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3199
on: aBlock message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3200
	^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: ''no '' , aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3202
!!PPPredicateObjectParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3203
on: aBlock message: aString negated: aNegatedBlock message: aNegatedString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3204
	^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3205
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3206
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3207
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3208
char: aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3209
	^ self expect: aCharacter message: (String with: $" with: aCharacter with: $") , '' expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3210
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3211
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3212
punctuation
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3213
	^ self chars: ''.,"''''?!!!!;:#$%&()*+-/<>=@[]\^_{}|~'' message: ''punctuation expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3214
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3215
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3216
blank
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3217
	^ self chars: (String with: Character space with: Character tab) message: ''blank expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3218
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3219
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3220
hex
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3221
	^ self 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3222
		on: (PPCharSetPredicate on: [ :char | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3223
			(char between: $0 and: $9) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3224
				or: [ (char between: $a and: $f) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3225
				or: [ (char between: $A and: $F) ] ] ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3226
		message: ''hex digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3227
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3228
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3229
newline
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3230
	^ self chars: (String with: Character cr with: Character lf) message: ''newline expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3231
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3232
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3233
word
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3234
	^ self on: (PPCharSetPredicate on: [ :char | char isAlphaNumeric ]) message: ''letter or digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3235
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3236
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 6/12/2010 09:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3237
lf
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3238
	^ self char: Character lf!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3239
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3240
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3241
digit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3242
	^ self on: (PPCharSetPredicate on: [ :char | char isDigit ]) message: ''digit expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3243
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3244
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:05''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3245
letter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3246
	^ self on: (PPCharSetPredicate on: [ :char | char isLetter ]) message: ''letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3247
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3248
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3249
uppercase
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3250
	^ self on: (PPCharSetPredicate on: [ :char | char isUppercase ]) message: ''uppercase letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3251
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3252
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3253
cr
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3254
	^ self char: Character cr message: ''carriage return expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3255
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3256
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3257
space
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3258
	^ self on: (PPCharSetPredicate on: [ :char | char isSeparator ]) message: ''separator expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3259
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3260
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3261
lowercase
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3262
	^ self on: (PPCharSetPredicate on: [ :char | char isLowercase ]) message: ''lowercase letter expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3263
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3264
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3265
tab
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3266
	^ self char: Character tab message: ''tab expected''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3267
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3268
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 11:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3269
chars: aCollection message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3270
	^ self on: (PPCharSetPredicate on: [ :char | aCollection includes: char ]) message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3271
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3272
!!PPPredicateObjectParser class methodsFor: ''factory-chars'' stamp: ''lr 8/25/2010 10:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3273
char: aCharacter message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3274
	^ self expect: aCharacter message: aString!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3275
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3276
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3277
PPPredicateParser subclass: #PPPredicateSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3278
	instanceVariableNames: ''size''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3279
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3280
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3281
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3282
!!PPPredicateSequenceParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3283
A parser that accepts if a given predicate on an arbitrary number of elements of the input sequence holds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3284
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3285
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3286
	size	<Integer>	The number of elements to consume.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3287
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3288
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3289
!!PPPredicateSequenceParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3290
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3291
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self size = aParser size ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3292
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3293
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3294
!!PPPredicateSequenceParser methodsFor: ''operators'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3295
negate
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3296
	"Answer a parser that is the negation of the receiving predicate parser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3297
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3298
	^ self class 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3299
		on: negated message: negatedMessage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3300
		negated: predicate message: predicateMessage
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3301
		size: size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3302
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3303
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3304
!!PPPredicateSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3305
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3306
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3307
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3308
	result := aPPContext stream next: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3309
	(result size = size and: [ predicate value: result ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3310
		ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3311
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3312
	^ PPFailure message: predicateMessage context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3313
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3314
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3315
!!PPPredicateSequenceParser methodsFor: ''accessing'' stamp: ''lr 6/12/2010 08:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3316
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3317
	"Answer the sequence size of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3318
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3319
	^ size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3320
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3321
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3322
!!PPPredicateSequenceParser methodsFor: ''initialization'' stamp: ''lr 6/12/2010 09:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3323
initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3324
	predicate := aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3325
	predicateMessage := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3326
	negated := aNegatedBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3327
	negatedMessage := aNegatedString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3328
	size := anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3329
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3330
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3331
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3332
PPPredicateSequenceParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3333
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3334
!!PPPredicateSequenceParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3335
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3336
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3337
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3338
!!PPPredicateSequenceParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3339
on: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3340
	^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3341
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3342
!!PPPredicateSequenceParser class methodsFor: ''instance creation'' stamp: ''lr 6/12/2010 09:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3343
on: aBlock message: aString size: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3344
	^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: ''no '' , aString size: anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3345
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3346
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3347
PPParser subclass: #PPDelegateParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3348
	instanceVariableNames: ''parser''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3349
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3350
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3351
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3352
!!PPDelegateParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3353
A parser that delegates to another parser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3354
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3355
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3356
	parser	<PPParser>	The parser to delegate to.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3357
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3358
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3359
!!PPDelegateParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3360
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3361
	^ Array with: parser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3362
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3363
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3364
!!PPDelegateParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/13/2010 09:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3365
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3366
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3367
	parser == aParser ifTrue: [ parser := anotherParser ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3368
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3369
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3370
!!PPDelegateParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3371
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3372
	^ parser parseOn: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3373
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3374
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3375
!!PPDelegateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3376
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3377
	parser exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3378
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3379
!!PPDelegateParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3380
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3381
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3382
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3383
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3384
!!PPDelegateParser methodsFor: ''initialization'' stamp: ''lr 4/20/2008 16:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3385
setParser: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3386
	parser := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3387
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3388
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3389
!!PPDelegateParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3390
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3391
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3392
		self displayDescription isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3393
			ifTrue: [ cc value: parser ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3394
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3395
				self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3396
					addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3397
						addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3398
						addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3399
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3400
					addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3401
						color: (self backgroundForDepth: anInteger);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3402
						addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3403
							addMorphBack: (cc value: parser);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3404
							addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3405
								hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3406
								addMorphBack: (self newSpacerMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3407
									width: 20;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3408
									yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3409
								addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3410
									hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3411
									listCentering: #center;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3412
									addMorphBack: (self newSpacerMorph);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3413
									addMorphBack: (StringMorph new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3414
										contents: self displayDescription;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3415
										yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3416
									yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3417
								yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3418
							yourself);		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3419
						addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3420
							addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3421
							addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3422
							yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3423
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3424
					yourself ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3425
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3426
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3427
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3428
PPDelegateParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3429
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3430
!!PPDelegateParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3431
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3432
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3433
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3434
!!PPDelegateParser class methodsFor: ''instance creation'' stamp: ''lr 4/20/2008 16:22''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3435
on: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3436
	^ self new setParser: aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3437
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3438
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3439
PPDelegateParser subclass: #PPAndParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3440
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3441
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3442
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3443
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3444
!!PPAndParser commentStamp: ''TudorGirba 2/27/2011 22:22'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3445
The and-predicate, a parser that succeeds whenever its delegate does, but does not consume the input stream [Parr 1994, 1995].!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3446
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3447
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3448
!!PPAndParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 5/1/2010 16:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3449
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3450
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3451
!!PPAndParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3452
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3453
	^ ''and''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3454
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3455
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3456
!!PPAndParser methodsFor: ''operators'' stamp: ''lr 5/1/2010 16:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3457
and
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3458
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3459
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3460
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3461
!!PPAndParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3462
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3463
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3464
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3465
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3466
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3467
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3468
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3469
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3470
PPDelegateParser subclass: #PPTrimmingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3471
	instanceVariableNames: ''trimmer''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3472
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3473
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3474
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3475
!!PPTrimmingParser commentStamp: ''lr 4/6/2010 19:27'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3476
A parser that silently consumes spaces before and after the delegate parser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3477
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3478
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3479
!!PPTrimmingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 4/14/2010 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3480
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3481
	super exampleOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3482
	aStream nextPut: Character space!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3483
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3484
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3485
!!PPTrimmingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3486
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3487
	| position element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3488
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3489
	[ (trimmer parseOn: aPPContext) isPetitFailure ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3490
		whileFalse.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3491
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3492
	element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3493
		aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3494
		^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3495
	[ (trimmer parseOn: aPPContext) isPetitFailure ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3496
		whileFalse.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3497
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3498
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3499
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3500
!!PPTrimmingParser methodsFor: ''initialization'' stamp: ''lr 7/31/2010 12:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3501
setTrimmer: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3502
	trimmer := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3503
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3504
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3505
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3506
PPTrimmingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3507
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3508
!!PPTrimmingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3509
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3510
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3511
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3512
!!PPTrimmingParser class methodsFor: ''instance creation'' stamp: ''lr 7/31/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3513
on: aParser trimmer: aTrimParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3514
	^ self new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3515
		setParser: aParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3516
		setTrimmer: aTrimParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3517
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3518
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3519
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3520
PPDelegateParser subclass: #PPMemoizedParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3521
	instanceVariableNames: ''buffer context''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3522
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3523
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3524
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3525
!!PPMemoizedParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3526
A memoized parser, for refraining redundant computations.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3527
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3528
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3529
	stream	<PositionableStream>	The stream of the associated memento objects.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3530
	buffer	<Array of: PPMemento>	The buffer of memento objects.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3531
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3532
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3533
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3534
!!PPMemoizedParser methodsFor: ''operators'' stamp: ''lr 4/2/2009 19:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3535
memoized
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3536
	"Ther is no point in memoizing more than once."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3537
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3538
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3539
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3540
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3541
!!PPMemoizedParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 13:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3542
reset: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3543
	context := aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3544
	buffer := Dictionary new.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3545
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3546
!!PPMemoizedParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3547
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3548
	| memento contextMemento  aStream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3549
	"TODO: JK memoizing needs review!!!!"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3550
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3551
	contextMemento := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3552
	context == aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3553
		ifFalse: [ self reset: aPPContext ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3554
	memento := (buffer at: contextMemento ifAbsentPut: [ PPMemento new ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3555
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3556
	memento contextMemento isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3557
		ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3558
			aStream := aPPContext stream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3559
			memento result: (aStream size - aStream position + 2 < memento count
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3560
				ifTrue: [ PPFailure message: ''overflow'' context: aPPContext ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3561
				ifFalse: [ memento increment. parser parseOn: aPPContext ]).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3562
			memento contextMemento: aPPContext remember ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3563
		ifFalse: [ context restore: memento contextMemento ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3564
	^ memento result.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3565
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3566
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3567
PPDelegateParser subclass: #PPEndOfInputParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3568
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3569
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3570
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3571
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3572
!!PPEndOfInputParser commentStamp: ''lr 4/18/2008 13:46'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3573
A parser that succeeds only at the end of the input stream.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3574
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3575
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3576
!!PPEndOfInputParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3577
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3578
	| position result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3579
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3580
	result := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3581
	(result isPetitFailure or: [ aPPContext stream atEnd ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3582
		ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3583
	result := PPFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3584
		message: ''end of input expected''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3585
		context: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3586
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3587
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3588
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3589
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3590
!!PPEndOfInputParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3591
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3592
	^ ''end of input''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3593
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3594
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3595
!!PPEndOfInputParser methodsFor: ''operators'' stamp: ''lr 12/7/2009 08:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3596
end
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3597
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3598
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3599
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3600
PPDelegateParser subclass: #PPActionParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3601
	instanceVariableNames: ''block''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3602
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3603
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3604
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3605
!!PPActionParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3606
A parser that performs an action block with the successful parse result of the delegate.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3607
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3608
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3609
	block	<BlockClosure>	The action block to be executed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3610
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3611
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3612
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3613
!!PPActionParser methodsFor: ''initialization'' stamp: ''lr 5/2/2010 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3614
setBlock: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3615
	block := aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3616
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3617
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3618
!!PPActionParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3619
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3620
	^ ''[]''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3621
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3622
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3623
!!PPActionParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3624
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3625
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3626
	^ (element := parser parseOn: aPPContext) isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3627
		ifFalse: [ block value: element ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3628
		ifTrue: [ element ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3629
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3630
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3631
!!PPActionParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3632
block
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3633
	"Answer the action block of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3634
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3635
	^ block!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3636
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3637
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3638
!!PPActionParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 5/7/2011 15:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3639
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3640
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3641
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3642
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3643
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3644
PPActionParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3645
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3646
!!PPActionParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3647
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3648
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3649
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3650
!!PPActionParser class methodsFor: ''instance creation'' stamp: ''lr 5/2/2010 16:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3651
on: aParser block: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3652
	^ (self on: aParser) setBlock: aBlock!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3653
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3654
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3655
PPActionParser subclass: #PPWrappingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3656
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3657
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3658
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3659
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3660
!!PPWrappingParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3661
A parser that performs an action block upon activation with the stream and a continuation block.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3662
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3663
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3664
!!PPWrappingParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3665
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3666
	^ block value: aPPContext value: [ parser parseOn: aPPContext ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3667
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3668
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3669
PPParser subclass: #PPListParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3670
	instanceVariableNames: ''parsers''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3671
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3672
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3673
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3674
!!PPListParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3675
Abstract parser that parses a list of things in some way (to be specified by the subclasses).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3676
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3677
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3678
	parsers	<SequenceableCollection of: PPParser>	A sequence of other parsers to delegate to.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3679
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3680
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3681
!!PPListParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 4/30/2010 08:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3682
copyInContext: aDictionary seen: aSeenDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3683
	| copy copies |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3684
	aSeenDictionary at: self ifPresent: [ :value | ^ value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3685
	copy := aSeenDictionary at: self put: self copy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3686
	copies := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3687
	parsers do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3688
		| result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3689
		result := each 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3690
			copyInContext: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3691
			seen: aSeenDictionary.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3692
		result isCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3693
			ifTrue: [ copies addAll: result ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3694
			ifFalse: [ copies add: result ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3695
	^ copy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3696
		setParsers: copies;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3697
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3698
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3699
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3700
!!PPListParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 5/22/2010 10:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3701
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3702
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3703
	parsers keysAndValuesDo: [ :index :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3704
		parser == aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3705
			ifTrue: [ parsers at: index put: anotherParser ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3706
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3707
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3708
!!PPListParser methodsFor: ''initialization'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3709
setParsers: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3710
	parsers := aCollection asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3711
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3712
!!PPListParser methodsFor: ''initialization'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3713
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3714
	super initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3715
	self setParsers: #()!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3716
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3717
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3718
!!PPListParser methodsFor: ''accessing'' stamp: ''lr 10/21/2009 16:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3719
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3720
	^ parsers!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3721
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3722
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3723
!!PPListParser methodsFor: ''copying'' stamp: ''lr 9/17/2008 22:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3724
copyWith: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3725
	^ self species withAll: (parsers copyWith: aParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3726
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3727
!!PPListParser methodsFor: ''copying'' stamp: ''lr 5/22/2010 10:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3728
postCopy
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3729
	super postCopy.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3730
	parsers := parsers copy!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3731
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3732
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3733
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3734
PPListParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3735
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3736
!!PPListParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3737
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3738
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3739
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3740
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 9/23/2008 18:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3741
with: aFirstParser with: aSecondParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3742
	^ self withAll: (Array with: aFirstParser with: aSecondParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3743
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3744
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 5/3/2010 20:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3745
with: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3746
	^ self withAll: (Array with: aParser)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3747
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3748
!!PPListParser class methodsFor: ''instance creation'' stamp: ''lr 4/29/2010 10:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3749
withAll: aCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3750
	^ self basicNew setParsers: aCollection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3751
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3752
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3753
PPListParser subclass: #PPChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3754
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3755
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3756
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3757
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3758
!!PPChoiceParser commentStamp: ''lr 4/18/2008 15:35'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3759
A parser that uses the first parser that succeeds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3760
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3761
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3762
!!PPChoiceParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3763
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3764
	^ ''/''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3765
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3766
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3767
!!PPChoiceParser methodsFor: ''operators'' stamp: ''lr 9/17/2008 00:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3768
/ aRule 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3769
	^ self copyWith: aRule!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3770
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3771
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3772
!!PPChoiceParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3773
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3774
	"This is optimized code that avoids unnecessary block activations, do not change. When all choices fail, the last failure is answered."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3775
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3776
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3777
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3778
		element := (parsers at: index)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3779
			parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3780
		element isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3781
			ifFalse: [ ^ element ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3782
	^ element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3783
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3784
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3785
!!PPChoiceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 5/2/2010 20:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3786
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3787
	"If there is already a lot written, try to pick an empty possiblity."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3788
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3789
	aStream position > 512 ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3790
		(parsers anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3791
			ifTrue: [ ^ self ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3792
	parsers atRandom exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3793
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3794
!!PPChoiceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3795
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3796
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3797
		| morph |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3798
		morph := self newColumnMorph 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3799
			cellInset: 5;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3800
			yourself.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3801
		self children do: [ :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3802
			morph addMorphBack: (self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3803
				hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3804
				addMorphBack: (cc value: each);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3805
				addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3806
					hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3807
					addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3808
					addMorphBack: ((LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3809
						hResizing: #spaceFill;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3810
						minWidth: 20;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3811
						yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3812
					yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3813
				yourself) ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3814
		morph fullBounds.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3815
		self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3816
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3817
				addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3818
				addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3819
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3820
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3821
				addMorphBack: (self newSpacerMorph width: 1; height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3822
				addMorphBack: (LineMorph from: 0 @ 0 to: 0 @ (morph height - 23) color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3823
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3824
			addMorphBack: morph;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3825
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3826
				addMorphBack: (self newSpacerMorph width: 1; height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3827
				addMorphBack: (LineMorph from: 0 @ (morph height - 23) to: 0 @ 0 color: Color black width: 1)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3828
					makeForwardArrow;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3829
					width: 1;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3830
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3831
			yourself ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3832
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3833
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3834
PPDelegateParser subclass: #PPNotParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3835
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3836
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3837
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3838
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3839
!!PPNotParser commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3840
The not-predicate, a parser that succeeds whenever its delegate does not, but consumes no input [Parr 1994, 1995].!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3841
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3842
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3843
!!PPNotParser methodsFor: ''*petitanalyzer-testing'' stamp: ''JanKurs 5/31/2013 11:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3844
isFirstSetTerminal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3845
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3846
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3847
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3848
!!PPNotParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3849
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3850
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3851
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3852
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3853
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3854
	^ element isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3855
		ifFalse: [ PPFailure message: '''' context: aPPContext ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3856
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3857
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3858
!!PPNotParser methodsFor: ''*petitanalyzer-private'' stamp: ''JanKurs 5/31/2013 11:50''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3859
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3860
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3861
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3862
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3863
!!PPNotParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/11/2009 21:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3864
exampleOn: aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3865
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3866
!!PPNotParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3867
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3868
	^ ''not''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3869
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3870
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3871
PPLiteralParser subclass: #PPLiteralSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3872
	instanceVariableNames: ''size''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3873
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3874
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3875
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3876
!!PPLiteralSequenceParser commentStamp: ''lr 12/4/2009 18:39'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3877
A parser accepts a sequence of literal objects, such as a String. This is an optimization to avoid having to compose longer sequences from PPSequenceParser.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3878
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3879
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3880
!!PPLiteralSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3881
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3882
	| memento result |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3883
	memento := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3884
	result := aPPContext stream next: size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3885
	literal = result ifTrue: [ ^ result ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3886
	aPPContext restore: memento.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3887
	^ PPFailure message: message context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3888
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3889
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3890
!!PPLiteralSequenceParser methodsFor: ''initialization'' stamp: ''lr 6/1/2010 22:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3891
initializeOn: anObject message: aString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3892
	super initializeOn: anObject message: aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3893
	size := literal size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3894
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3895
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3896
!!PPLiteralSequenceParser methodsFor: ''accessing'' stamp: ''lr 9/15/2010 11:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3897
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3898
	"Answer the sequence size of the receiver."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3899
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3900
	^ size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3901
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3902
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3903
!!PPLiteralSequenceParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3904
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3905
	aStream nextPutAll: literal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3906
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3907
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3908
!!PPLiteralSequenceParser methodsFor: ''operators'' stamp: ''lr 8/18/2010 20:16''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3909
caseInsensitive
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3910
	"Answer a parser that can parse the receiver case-insensitive."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3911
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3912
	literal asUppercase = literal asLowercase ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3913
	^ PPPredicateSequenceParser on: [ :value | literal sameAs: value ] message: message size: size!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3914
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3916
PPDelegateParser subclass: #PPOptionalParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3917
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3918
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3919
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3920
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3921
!!PPOptionalParser commentStamp: ''lr 4/3/2011 14:46'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3922
A parser that optionally parsers its delegate, or answers nil.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3923
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3924
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3925
!!PPOptionalParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 9/1/2010 22:10''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3926
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3927
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3928
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3929
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3930
!!PPOptionalParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3931
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3932
	^ ''?''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3933
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3934
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3935
!!PPOptionalParser methodsFor: ''pp-context'' stamp: ''JanKurs 3/19/2014 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3936
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3937
	| element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3938
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3939
	^ element isPetitFailure ifFalse: [ element ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3940
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3941
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3942
PPDelegateParser subclass: #PPFlattenParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3943
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3944
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3945
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3946
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3947
!!PPFlattenParser commentStamp: ''lr 11/22/2009 13:09'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3948
A parser that answers a flat copy of the range my delegate parses.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3949
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3950
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3951
!!PPFlattenParser methodsFor: ''private'' stamp: ''lr 2/25/2013 23:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3952
on: aCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3953
	^ aCollection copyFrom: aStartInteger to: aStopInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3954
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3955
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3956
!!PPFlattenParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3957
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3958
	| start element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3959
	start := aPPContext stream position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3960
	element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3961
	element isPetitFailure ifTrue: [ ^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3962
	^ self on: aPPContext stream collection start: start + 1 stop: aPPContext stream position value: element!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3963
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3964
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3965
PPFlattenParser subclass: #PPTokenParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3966
	instanceVariableNames: ''tokenClass''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3967
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3968
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3969
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3970
!!PPTokenParser commentStamp: ''lr 2/25/2013 23:31'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3971
A parser that answers a token with the value of my delegate parses.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3972
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3973
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3974
	tokenClass	<PPToken class>	The token sub-class to be used.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3975
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3976
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3977
!!PPTokenParser methodsFor: ''private'' stamp: ''lr 4/6/2010 19:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3978
defaultTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3979
	^ PPToken!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3980
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3981
!!PPTokenParser methodsFor: ''private'' stamp: ''lr 2/25/2013 23:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3982
on: aCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3983
	^ self tokenClass on: aCollection start: aStartInteger stop: aStopInteger value: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3984
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3985
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3986
!!PPTokenParser methodsFor: ''initialization'' stamp: ''lr 4/6/2010 19:19''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3987
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3988
	tokenClass := self defaultTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3989
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3990
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3991
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3992
!!PPTokenParser methodsFor: ''accessing'' stamp: ''lr 4/6/2010 19:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3993
tokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3994
	^ tokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3995
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3996
!!PPTokenParser methodsFor: ''accessing'' stamp: ''lr 4/6/2010 19:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3997
tokenClass: aTokenClass
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3998
	tokenClass := aTokenClass!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  3999
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4000
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4001
!!PPTokenParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4002
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4003
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self tokenClass = aParser tokenClass ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4004
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4005
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4006
PPDelegateParser subclass: #PPRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4007
	instanceVariableNames: ''min max''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4008
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4009
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4010
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4011
!!PPRepeatingParser commentStamp: ''lr 4/3/2011 14:45'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4012
An abstract parser that repeatedly parses between ''min'' and ''max'' instances of its delegate. The default configuration parses an infinite number of elements, as ''min'' is set to 0 and ''max'' to infinity (SmallInteger maxVal).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4013
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4014
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4015
	min	<Integer>	The minimum number of repetitions.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4016
	max	<Integer>	The maximum number of repetitions.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4017
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4018
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4019
!!PPRepeatingParser methodsFor: ''*petitanalyzer-matching'' stamp: ''lr 6/18/2010 14:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4020
match: aParser inContext: aDictionary seen: anIdentitySet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4021
	^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self min = aParser min and: [ self max = aParser max ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4022
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4023
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4024
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4025
setMax: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4026
	max := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4027
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4028
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4029
setMin: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4030
	min := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4031
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4032
!!PPRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/1/2011 21:06''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4033
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4034
	super initialize.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4035
	self setMin: 0; setMax: SmallInteger maxVal!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4036
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4037
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4038
!!PPRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4039
max
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4040
	"Answer the maximum number of repetitions."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4041
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4042
	^ max!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4043
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4044
!!PPRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/30/2010 11:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4045
min
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4046
	"Answer the minimum number of repetitions."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4047
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4048
	^ min!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4049
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4050
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4051
!!PPRepeatingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/11/2009 20:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4052
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4053
	"Perform the minimal repeatitions required, and a random amount of more if possible and if not that much output has been produced yet."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4054
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4055
	min timesRepeat: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4056
		super exampleOn: aStream ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4057
	(max - min min: 5) atRandom timesRepeat: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4058
		aStream position > 512
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4059
			ifTrue: [ ^ self ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4060
		super exampleOn: aStream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4061
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4062
!!PPRepeatingParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/13/2009 14:18''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4063
displayDescription
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4064
	^ String streamContents: [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4065
		min = 0 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4066
			ifFalse: [ stream print: min; nextPutAll: ''..'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4067
		max = SmallInteger maxVal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4068
			ifTrue: [ stream nextPut: $* ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4069
			ifFalse: [ stream print: max ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4070
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4071
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4072
!!PPRepeatingParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 10/21/2009 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4073
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4074
	^ min = 0!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4075
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4076
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4077
!!PPRepeatingParser methodsFor: ''*petitanalyzer-private'' stamp: ''JanKurs 5/31/2013 11:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4078
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4079
	| firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4080
	super followSets: aFollowDictionary firstSets:  aFirstDictionary into: aSet.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4081
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4082
	firstSet := aFirstDictionary at: self.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4083
	self children do: [:p | (aFollowDictionary at: p) addAll: (firstSet reject: [:each | each isNullable]) ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4084
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4085
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4086
!!PPRepeatingParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4087
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4088
	^ ''*''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4089
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4090
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4091
!!PPRepeatingParser methodsFor: ''printing'' stamp: ''lr 6/3/2010 14:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4092
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4093
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4094
	aStream nextPutAll: '' [''; print: min; nextPutAll: '', ''; nextPutAll: (max = SmallInteger maxVal
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4095
		ifTrue: [ ''*'' ] ifFalse: [ max printString ]); nextPut: $]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4096
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4097
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4098
PPRepeatingParser subclass: #PPPossessiveRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4099
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4100
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4101
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4102
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4103
!!PPPossessiveRepeatingParser commentStamp: ''lr 4/3/2011 14:35'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4104
The default repeating parser with standard PEG semantics (i.e. possessive, blind, eager).!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4105
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4106
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4107
!!PPPossessiveRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 15:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4108
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4109
	| start element elements |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4110
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4111
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4112
	[ elements size < min ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4113
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4114
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4115
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4116
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4117
	[ elements size < max ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4118
	 	(element := parser parseOn: aPPContext) isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4119
			ifTrue: [ ^ elements asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4120
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4121
	^ elements asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4122
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4123
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4124
PPRepeatingParser subclass: #PPLimitedRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4125
	instanceVariableNames: ''limit''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4126
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4127
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4128
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4129
!!PPLimitedRepeatingParser commentStamp: ''lr 4/3/2011 14:37'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4130
An abstract parser that repeatedly parses between ''min'' and ''max'' instances of my delegate and that requires the input to be completed with a specified parser ''limit''. Subclasses provide repeating behavior as typically seen in regular expression implementations (non-blind).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4131
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4132
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4133
	limit	<PPParser>	The parser to complete the input with.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4134
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4135
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4136
!!PPLimitedRepeatingParser methodsFor: ''*petitanalyzer-transforming'' stamp: ''lr 4/4/2011 18:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4137
replace: aParser with: anotherParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4138
	super replace: aParser with: anotherParser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4139
	limit == aParser ifTrue: [ limit := anotherParser ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4140
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4141
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4142
!!PPLimitedRepeatingParser methodsFor: ''initialization'' stamp: ''lr 4/2/2011 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4143
setLimit: aParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4144
	limit := aParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4145
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4146
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4147
!!PPLimitedRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/4/2011 18:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4148
children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4149
	^ Array with: parser with: limit!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4150
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4151
!!PPLimitedRepeatingParser methodsFor: ''accessing'' stamp: ''lr 4/2/2011 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4152
limit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4153
	"Answer the parser that limits (or ends) this repetition."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4154
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4155
	^ limit!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4156
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4157
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4158
!!PPLimitedRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 1/15/2014 16:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4159
matchesLimitOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4160
	| element position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4161
	position := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4162
	element := limit parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4163
	aPPContext restore: position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4164
	^ element isPetitFailure not!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4165
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4166
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4167
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4168
PPLimitedRepeatingParser class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4169
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4170
!!PPLimitedRepeatingParser class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4171
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4172
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4173
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4174
!!PPLimitedRepeatingParser class methodsFor: ''instance creation'' stamp: ''lr 4/3/2011 14:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4175
on: aParser limit: aLimitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4176
	^ (self on: aParser) setLimit: aLimitParser!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4177
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4178
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4179
PPLimitedRepeatingParser subclass: #PPGreedyRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4180
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4181
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4182
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4183
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4184
!!PPGreedyRepeatingParser commentStamp: ''lr 4/3/2011 15:08'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4185
A greedy repeating parser, commonly seen in regular expression implementations. It aggressively consumes as much input as possible and then backtracks to meet the ''limit'' condition.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4186
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4187
This class essentially implements the iterative version of the following recursive parser composition:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4188
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4189
	| parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4190
	parser := PPChoiceParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4191
	parser setParsers: (Array
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4192
		with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4193
		with: (limit and ==> [ :each | OrderedCollection new ])).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4194
	^ parser ==> [ :rest | rest asArray ]!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4195
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4196
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4197
!!PPGreedyRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 16:59''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4198
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4199
	| start element elements positions |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4200
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4201
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4202
	[ elements size < min ] whileTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4203
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4204
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4205
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4206
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4207
	positions := OrderedCollection with: aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4208
	[ elements size < max and: [ (element := parser parseOn: aPPContext) isPetitFailure not ] ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4209
		elements addLast: element.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4210
		positions addLast: aPPContext remember ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4211
	[ positions isEmpty ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4212
		aPPContext restore: positions last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4213
		element := limit parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4214
		element isPetitFailure ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4215
			aPPContext restore: positions last.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4216
			^ elements asArray ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4217
		elements isEmpty ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4218
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4219
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4220
		elements removeLast.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4221
		positions removeLast ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4222
	aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4223
	^ PPFailure message: ''overflow'' context: aPPContext at: start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4224
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4225
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4226
PPParser subclass: #PPEpsilonParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4227
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4228
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4229
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4230
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4231
!!PPEpsilonParser commentStamp: ''lr 5/15/2008 15:09'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4232
A parser that consumes nothing and always succeeds.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4233
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4234
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4235
!!PPEpsilonParser methodsFor: ''*petitanalyzer-testing'' stamp: ''lr 10/21/2009 12:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4236
isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4237
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4238
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4239
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4240
!!PPEpsilonParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/18/2009 11:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4241
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4242
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4243
		self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4244
			addMorphBack: (self newColumnMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4245
				addMorphBack: (self newSpacerMorph height: 10);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4246
				addMorphBack: (LineMorph from: 0 @ 0 to: 20 @ 0 color: Color black width: 1);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4247
				yourself);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4248
			yourself ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4249
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4250
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4251
!!PPEpsilonParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/6/2009 18:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4252
displayName
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4253
	^ ''epsilon''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4254
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4255
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4256
!!PPEpsilonParser methodsFor: ''parsing'' stamp: ''lr 2/7/2010 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4257
parseOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4258
	^ nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4259
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4260
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4261
PPLimitedRepeatingParser subclass: #PPLazyRepeatingParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4262
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4263
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4264
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4265
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4266
!!PPLazyRepeatingParser commentStamp: ''lr 4/3/2011 15:08'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4267
A lazy repeating parser, commonly seen in regular expression implementations. It limits its consumption to meet the ''limit'' condition as early as possible.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4268
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4269
This class essentially implements the iterative version of the following recursive parser composition:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4270
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4271
	| parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4272
	parser := PPChoiceParser new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4273
	parser setParsers: (Array
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4274
		with: (limit and ==> [ :each | OrderedCollection new ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4275
		with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4276
	^ parser ==> [ :rest | rest asArray ]!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4277
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4278
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4279
!!PPLazyRepeatingParser methodsFor: ''pp-context'' stamp: ''JanKurs 8/19/2014 17:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4280
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4281
	| start element elements |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4282
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4283
	elements := OrderedCollection new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4284
	[ elements size < min ] whileTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4285
		(element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4286
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4287
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4288
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4289
	[ self matchesLimitOn: aPPContext ] whileFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4290
		elements size < max ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4291
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4292
			^ PPFailure message: ''overflow'' context: aPPContext at: start ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4293
		element := parser parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4294
		element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4295
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4296
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4297
		elements addLast: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4298
	^ elements asArray!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4299
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4300
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4301
PPListParser subclass: #PPSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4302
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4303
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4304
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4305
	category: ''PetitParser-Parsers''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4306
!!PPSequenceParser commentStamp: ''lr 4/18/2008 15:34'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4307
A parser that parses a sequence of parsers.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4308
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4309
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4310
!!PPSequenceParser methodsFor: ''operators-mapping'' stamp: ''lr 5/6/2011 20:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4311
map: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4312
	^ aBlock numArgs = self children size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4313
		ifTrue: [ self ==> [ :nodes | aBlock valueWithArguments: nodes ] ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4314
		ifFalse: [ self error: aBlock numArgs asString , '' arguments expected.'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4315
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4316
!!PPSequenceParser methodsFor: ''operators-mapping'' stamp: ''lr 1/8/2010 12:01''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4317
permutation: anArrayOfIntegers
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4318
	"Answer a permutation of the receivers sequence."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4319
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4320
	anArrayOfIntegers do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4321
		(index isInteger and: [ index between: 1 and: parsers size ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4322
			ifFalse: [ self error: ''Invalid permutation index: '' , index printString ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4323
	^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4324
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4325
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4326
!!PPSequenceParser methodsFor: ''*petitgui-morphic'' stamp: ''lr 11/17/2009 21:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4327
morphicShapeSeen: aSet depth: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4328
	^ self morphicShapeSeen: aSet depth: anInteger do: [ :cc |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4329
		self children
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4330
			inject: self newRowMorph
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4331
			into: [ :result :each | 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4332
				result 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4333
					addMorphBack: (cc value: each);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4334
					yourself ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4335
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4336
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4337
!!PPSequenceParser methodsFor: ''*petitgui-accessing'' stamp: ''lr 11/9/2009 14:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4338
exampleOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4339
	parsers do: [ :each | each exampleOn: aStream ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4340
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4341
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4342
!!PPSequenceParser methodsFor: ''pp-context'' stamp: ''JanKurs 11/11/2013 09:43''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4343
parseOn: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4344
	"This is optimized code that avoids unnecessary block activations, do not change."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4345
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4346
	| start elements element |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4347
	start := aPPContext remember.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4348
	elements := Array new: parsers size.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4349
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4350
		element := (parsers at: index) 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4351
			parseOn: aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4352
		element isPetitFailure ifTrue: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4353
			aPPContext restore: start.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4354
			^ element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4355
		elements at: index put: element ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4356
	^ elements!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4357
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4358
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4359
!!PPSequenceParser methodsFor: ''operators'' stamp: ''lr 9/17/2008 00:17''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4360
, aRule
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4361
	^ self copyWith: aRule!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4362
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4363
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4364
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 12/9/2010 10:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4365
cycleSet: aDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4366
	| firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4367
	1 to: parsers size do: [ :index |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4368
		firstSet := aDictionary at: (parsers at: index).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4369
		(firstSet anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4370
			ifFalse: [ ^ parsers copyFrom: 1 to: index ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4371
	^ parsers!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4372
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4373
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 9/16/2010 17:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4374
firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4375
	| nullable |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4376
	parsers do: [ :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4377
		nullable := false.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4378
		(aFirstDictionary at: parser) do: [ :each |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4379
			each isNullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4380
				ifTrue: [ nullable := true ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4381
				ifFalse: [ aSet add: each ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4382
		nullable
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4383
			ifFalse: [ ^ self ] ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4384
	aSet add: PPSentinel instance!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4385
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4386
!!PPSequenceParser methodsFor: ''*petitanalyzer-private'' stamp: ''lr 8/14/2010 13:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4387
followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4388
	parsers keysAndValuesDo: [ :index :parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4389
		| followSet firstSet |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4390
		followSet := aFollowDictionary at: parser.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4391
		index = parsers size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4392
			ifTrue: [ followSet addAll: aSet ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4393
			ifFalse: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4394
				(self class withAll: (parsers 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4395
					copyFrom: index + 1 to: parsers size))
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4396
						firstSets: aFirstDictionary
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4397
						into: (firstSet := IdentitySet new).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4398
				(firstSet anySatisfy: [ :each | each isNullable ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4399
					ifTrue: [ followSet addAll: aSet ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4400
				followSet addAll: (firstSet 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4401
					reject: [ :each | each isNullable ]) ] ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4402
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4403
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4404
!!PPSequenceParser methodsFor: ''*petitgui-mondrian'' stamp: ''AlexandreBergel 12/18/2013 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4405
visualizationGraphType
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4406
	^ '',''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4407
Object subclass: #PPFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4408
	instanceVariableNames: ''message context position''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4409
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4410
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4411
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4412
!!PPFailure commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4413
The failure object in PetitParser. It is the only class that responds to #isPetitFailure with true. It contains an error message and a position of the occurrence of the failure.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4414
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4415
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4416
	message	<String>	The error message of this failure.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4417
	position	<Integer>	The position of this failure in the input stream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4418
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4419
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4420
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4421
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4422
sampleIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4423
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4424
	(composite text)
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4425
		title: ''Sample'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4426
		display: [:res | res findStream contents ifNil: [''''] ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4427
		allowNil.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4428
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4429
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4430
treeViewIn: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4431
	composite tree
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4432
		title: ''Execution Traces'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4433
		format: [:resultNode | resultNode formattedText ];
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4434
		children: [:resultNode | resultNode showChildren 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4435
											ifTrue: [ resultNode children ] 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4436
											ifFalse: [ #() ] ]. !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4437
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4438
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4439
gtDebugView: composite
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4440
	<gtInspectorPresentationOrder: 40>
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4441
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4442
	| browser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4443
	browser := 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4444
		composite tabulator.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4445
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4446
	browser title: ''Debug View''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4447
	browser row: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4448
			  row: #source.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4449
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4450
		fromOutsideEntityPort; 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4451
		toOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4452
		transformed: [ :failure | failure debugResult  ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4453
				
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4454
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4455
		from: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4456
		to: #source port: #selectionInterval;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4457
		transformed: [:debuggingResult |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4458
			debuggingResult ifNotNil: [
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4459
			debuggingResult start to: debuggingResult end]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4460
		].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4461
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4462
	browser transmit
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4463
		fromOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4464
		to: #source;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4465
		andShow: [ :a |  self sampleIn: a ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4466
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4467
	browser transmit 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4468
		fromOutsidePort: #debugResult;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4469
		to: #tree;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4470
		andShow: [ :a | self treeViewIn: a ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4471
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4472
	browser startOn: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4473
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4474
!!PPFailure methodsFor: ''*petitgui'' stamp: ''JanKurs 8/19/2014 16:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4475
debugResult
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4476
	^ context root enableDebug parse: context stream reset!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4477
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4478
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4479
!!PPFailure methodsFor: ''testing'' stamp: ''lr 2/7/2010 20:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4480
isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4481
	"I am the only class that should implement this method to return true."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4482
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4483
	^ true!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4484
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4485
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4486
!!PPFailure methodsFor: ''printing'' stamp: ''JanKurs 8/19/2014 16:30''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4487
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4488
	aStream nextPutAll: self message; nextPutAll: '' at ''; print: self position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4489
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4490
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4491
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4492
initializeMessage: aString context: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4493
	self initializeMessage: aString context:  aPPContext position: aPPContext position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4494
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4495
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4496
initializeMessage: aString at: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4497
	self halt: ''deprecated''.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4498
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4499
!!PPFailure methodsFor: ''initialization'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4500
initializeMessage: aString context: aPPContext position: position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4501
	message := aString.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4502
	context := aPPContext.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4503
	position := position.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4504
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4505
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4506
!!PPFailure methodsFor: ''accessing'' stamp: ''lr 5/5/2010 13:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4507
message
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4508
	"Answer a human readable error message of this parse failure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4509
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4510
	^ message!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4511
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4512
!!PPFailure methodsFor: ''accessing'' stamp: ''lr 5/5/2010 13:55''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4513
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4514
	"Answer the position in the source string that caused this parse failure."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4515
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4516
	^ position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4517
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4518
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4519
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4520
PPFailure class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4521
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4522
!!PPFailure class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4523
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4524
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4525
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4526
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4527
message: aString at: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4528
	self halt: ''deprecated, use message:context:''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4529
	^ self basicNew initializeMessage: aString at: anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4530
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4531
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4532
message: aString context: aPPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4533
	^ self basicNew initializeMessage: aString context: aPPContext!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4534
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4535
!!PPFailure class methodsFor: ''instance creation'' stamp: ''JanKurs 8/19/2014 16:57''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4536
message: aString context: aPPContext at: position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4537
	^ self basicNew initializeMessage: aString context: aPPContext position: position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4538
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4539
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4540
ReadStream subclass: #PPStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4541
	instanceVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4542
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4543
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4544
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4545
!!PPStream commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4546
A positional stream implementation used for parsing. It overrides some methods for optimization reasons.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4547
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4548
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4549
!!PPStream methodsFor: ''accessing'' stamp: ''lr 4/29/2008 21:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4550
peek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4551
	"An improved version of peek, that is slightly faster than the built in version."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4552
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4553
	^ self atEnd ifFalse: [ collection at: position + 1 ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4554
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4555
!!PPStream methodsFor: ''accessing'' stamp: ''lr 10/5/2010 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4556
uncheckedPeek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4557
	"An unchecked version of peek that throws an error if we try to peek over the end of the stream, even faster than #peek."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4558
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4559
	^ collection at: position + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4560
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4561
!!PPStream methodsFor: ''accessing'' stamp: ''lr 2/13/2012 20:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4562
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4563
	"Answer the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4564
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4565
	^ collection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4566
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4567
!!PPStream methodsFor: ''accessing'' stamp: ''lr 8/25/2010 11:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4568
position: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4569
	"The receiver does not check for invalid arguments passed to this method, as it is solely used with valid indexes for backtracking."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4570
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4571
	position := anInteger!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4572
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4573
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4574
!!PPStream methodsFor: ''printing'' stamp: ''lr 11/4/2010 19:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4575
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4576
	collection isString
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4577
		ifFalse: [ ^ super printOn: aStream ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4578
	aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4579
		nextPutAll: (collection copyFrom: 1 to: position);
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4580
		nextPutAll: ''·'';
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4581
		nextPutAll: (collection copyFrom: position + 1 to: readLimit)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4582
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4583
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4584
!!PPStream methodsFor: ''converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4585
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4586
	^ self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4587
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4588
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4589
Object subclass: #PPToken
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4590
	instanceVariableNames: ''collection start stop value''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4591
	classVariableNames: ''NewLineParser''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4592
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4593
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4594
!!PPToken commentStamp: ''lr 2/25/2013 23:34'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4595
PPToken represents a parsed part of the input stream. Contrary to a simple String it remembers where it came from, the original collection, its start and stop position and its parse value.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4596
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4597
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4598
	collection	<SequenceableCollection>	The collection this token comes from.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4599
	start	<Integer>	The start position in the collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4600
	stop	<Integer>	The stop position in the collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4601
	value <Object>	The parse result.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4602
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4603
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4604
!!PPToken methodsFor: ''querying'' stamp: ''lr 9/7/2011 20:41''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4605
line
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4606
	"Answer the line number of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4607
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4608
	| line |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4609
	line := 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4610
	(NewLineParser , [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4611
		start <= stream position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4612
			ifTrue: [ ^ line ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4613
		line := line + 1 ] asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4614
		/ #any asParser) star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4615
			parse: collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4616
	^ line!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4617
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4618
!!PPToken methodsFor: ''querying'' stamp: ''lr 9/7/2011 20:40''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4619
column
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4620
	"Answer the column number of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4621
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4622
	| position |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4623
	position := 0.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4624
	(NewLineParser , [ :stream |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4625
		start <= stream position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4626
			ifTrue: [ ^ start - position ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4627
		position := stream position ] asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4628
		/ #any asParser) star
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4629
			parse: collection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4630
	 ^ start - position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4631
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4632
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4633
!!PPToken methodsFor: ''initialization'' stamp: ''lr 2/25/2013 23:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4634
initializeOn: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4635
	collection := aSequenceableCollection.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4636
	start := aStartInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4637
	stop := aStopInteger.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4638
	value := anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4639
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4640
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4641
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4642
stop
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4643
	"Answer the stop position of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4644
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4645
	^ stop!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4646
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4647
!!PPToken methodsFor: ''accessing'' stamp: ''lr 2/25/2013 23:56''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4648
size
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4649
	"Answer the size of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4650
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4651
	^ stop - start + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4652
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4653
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4654
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4655
	"Answer the underlying collection of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4656
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4657
	^ collection!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4658
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4659
!!PPToken methodsFor: ''accessing'' stamp: ''lr 6/15/2010 23:33''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4660
start
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4661
	"Answer the start position of this token in the underlying collection."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4662
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4663
	^ start!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4664
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4665
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4666
!!PPToken methodsFor: ''printing'' stamp: ''lr 2/26/2013 00:37''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4667
printOn: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4668
	super printOn: aStream.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4669
	aStream nextPut: $[; print: self start; nextPut: $,; print: self stop; nextPut: $].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4670
	aStream nextPut: $(; print: self parsedValue; nextPut: $)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4671
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4672
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4673
!!PPToken methodsFor: ''copying'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4674
copyFrom: aStartInteger to: aStopInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4675
	^ self class on: collection start: start + aStartInteger - 1 stop: stop + aStopInteger - 3 value: value!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4676
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4677
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4678
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4679
value
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4680
	self notify: ''Token>>#value is no longer supported. Instead use Token>>#inputValue or the more pragmatic #parsedValue.''.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4681
	^ self inputValue!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4682
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4683
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4684
inputValue
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4685
	"Answer the consumed input of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4686
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4687
	^ collection copyFrom: start to: stop!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4688
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4689
!!PPToken methodsFor: ''accessing-values'' stamp: ''lr 2/26/2013 00:32''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4690
parsedValue
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4691
	"Answer the parsed value of this token."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4692
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4693
	^ value!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4694
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4695
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4696
!!PPToken methodsFor: ''comparing'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4697
= anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4698
	^ self class = anObject class and: [ self parsedValue = anObject parsedValue ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4699
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4700
!!PPToken methodsFor: ''comparing'' stamp: ''lr 2/26/2013 00:34''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4701
hash
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4702
	^ self parsedValue hash!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4703
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4704
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4705
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4706
PPToken class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4707
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4708
!!PPToken class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4709
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4710
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4711
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4712
!!PPToken class methodsFor: ''initialization'' stamp: ''lr 11/29/2011 20:42''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4713
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4714
	"Platform independent newline sequence. LF: Unix, CR+LF: Windows, and CR: Apple."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4715
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4716
	NewLineParser := (Character lf asParser) / (Character cr asParser , Character lf asParser optional)!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4717
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4718
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4719
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 2/25/2013 23:39''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4720
on: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4721
	^ self basicNew 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4722
		initializeOn: aSequenceableCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4723
		start: aStartInteger stop: aStopInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4724
		value: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4725
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4726
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 2/25/2013 23:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4727
on: aSequenceableCollection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4728
	^ self on: aSequenceableCollection start: 1 stop: aSequenceableCollection size value: nil!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4729
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4730
!!PPToken class methodsFor: ''instance creation'' stamp: ''lr 4/6/2010 20:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4731
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4732
	self error: ''Token can only be created using a dedicated constructor.''!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4733
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4734
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4735
Object subclass: #PPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4736
	instanceVariableNames: ''stream position properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4737
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4738
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4739
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4740
!!PPContextMemento commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4741
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4742
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4743
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4744
!!PPContextMemento methodsFor: ''comparing'' stamp: ''JanKurs 3/19/2014 13:03''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4745
= anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4746
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4747
	(self == anObject) ifTrue: [ ^ true ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4748
	(anObject class = PPContextMemento) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4749
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4750
	(anObject stream == stream) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4751
	(anObject position = position) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4752
	(anObject properties = properties) ifFalse: [ ^ false ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4753
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4754
	^ true.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4755
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4756
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4757
!!PPContextMemento methodsFor: ''comparing'' stamp: ''JanKurs 3/19/2014 13:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4758
hash
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4759
	^ (position hash bitXor: stream hash) bitXor: properties hash.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4760
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4761
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4762
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4763
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4764
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4765
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4766
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4767
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4768
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4769
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4770
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4771
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4772
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4773
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4774
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4775
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4776
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4777
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4778
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4779
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4780
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4781
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4782
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4783
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4784
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4785
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4786
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4787
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4788
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4789
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4790
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4791
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4792
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4793
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4794
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4795
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4796
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4797
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4798
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4799
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:14''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4800
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4801
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4802
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4803
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4804
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4805
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 12:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4806
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4807
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4808
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4809
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4810
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4811
!!PPContextMemento methodsFor: ''accessing - properties'' stamp: ''JanKurs 3/19/2014 13:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4812
properties
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4813
	^ properties !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4814
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4815
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4816
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4817
stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4818
	stream := aStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4819
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4820
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4821
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4822
	^ position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4823
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4824
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:52''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4825
position: anInteger
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4826
	position := anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4827
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4828
!!PPContextMemento methodsFor: ''as yet unclassified'' stamp: ''JanKurs 10/28/2013 16:51''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4829
stream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4830
	^ stream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4831
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4832
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4833
Object subclass: #PPContext
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4834
	instanceVariableNames: ''stream root properties''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4835
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4836
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4837
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4838
!!PPContext commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4839
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4840
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4841
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4842
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:27''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4843
remember
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4844
	| memento |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4845
	memento := PPContextMemento new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4846
		stream: stream;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4847
		position: stream position;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4848
		yourself.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4849
		
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4850
	self rememberProperties: memento.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4851
	^ memento!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4852
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4853
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4854
restore: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4855
	aPPContextMemento stream == stream ifFalse: [ self error: ''Oops!!!!'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4856
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4857
	stream position: aPPContextMemento position.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4858
	self restoreProperties: aPPContextMemento.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4859
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4860
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4861
restoreProperties: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4862
	aPPContextMemento stream == stream ifFalse: [ self error: ''Oops!!!!'' ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4863
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4864
	aPPContextMemento class selectorsAndMethodsDo: [ :selector :method |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4865
		(selector beginsWith: ''restore'') ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4866
			aPPContextMemento withArgs: (Array with: self) executeMethod: method.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4867
		]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4868
	]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4869
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4870
!!PPContext methodsFor: ''memoization'' stamp: ''JanKurs 3/19/2014 16:28''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4871
rememberProperties: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4872
	aPPContextMemento class selectorsAndMethodsDo: [ :selector :method |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4873
		(selector beginsWith: ''remember'') ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4874
			aPPContextMemento withArgs: (Array with: self) executeMethod: method.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4875
		]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4876
	]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4877
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4878
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4879
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4880
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4881
peekTwice
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4882
	^ stream peekTwice!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4883
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4884
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4885
position
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4886
	^ stream position!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4887
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4888
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4889
uncheckedPeek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4890
	^ stream uncheckedPeek!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4891
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4892
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:11''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4893
upTo: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4894
	^ stream upTo: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4895
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4896
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4897
collection
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4898
	^ stream collection  !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4899
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4900
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/16/2014 12:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4901
atEnd
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4902
	^ stream atEnd!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4903
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4904
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4905
peek
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4906
	^ stream peek!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4907
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4908
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:29''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4909
upToAll: whatever
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4910
	^ stream upToAll: whatever!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4911
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4912
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 8/19/2014 14:08''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4913
skip: anInteger 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4914
	^ stream skip: anInteger !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4915
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4916
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 4/29/2014 16:31''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4917
upToAnyOf: whatever
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4918
	^ stream upToAnyOf: whatever!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4919
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4920
!!PPContext methodsFor: ''stream mimicry'' stamp: ''JanKurs 1/15/2014 16:02''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4921
next
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4922
	^ stream next!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4923
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4924
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4925
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4926
propertyAt: aKey ifAbsentPut: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4927
	"Answer the property associated with aKey or, if aKey isn''t found store the result of evaluating aBlock as new value."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4928
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4929
	^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4930
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4931
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4932
removeProperty: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4933
	"Remove the property with aKey. Answer the value or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4934
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4935
	| answer |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4936
	properties isNil ifTrue: [ ^ aBlock value ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4937
	answer := properties removeKey: aKey ifAbsent: aBlock.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4938
	properties isEmpty ifTrue: [ properties := nil ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4939
	^ answer!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4940
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4941
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4942
propertyAt: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4943
	"Answer the property value associated with aKey."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4944
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4945
	^ self propertyAt: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4946
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4947
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4948
propertyAt: aKey ifAbsent: aBlock
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4949
	"Answer the property value associated with aKey or, if aKey isn''t found, answer the result of evaluating aBlock."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4950
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4951
	^ properties isNil
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4952
		ifTrue: [ aBlock value ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4953
		ifFalse: [ properties at: aKey ifAbsent: aBlock ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4954
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4955
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4956
propertyAt: aKey put: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4957
	"Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4958
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4959
	^ (properties ifNil: [ properties := Dictionary new: 1 ])
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4960
		at: aKey put: anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4961
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4962
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4963
hasProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4964
	"Test if the property aKey is present."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4965
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4966
	^ properties notNil and: [ properties includesKey: aKey ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4967
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4968
!!PPContext methodsFor: ''accessing-properties'' stamp: ''JanKurs 1/16/2014 11:25''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4969
removeProperty: aKey
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4970
	"Remove the property with aKey. Answer the property or raise an error if aKey isn''t found."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4971
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4972
	^ self removeProperty: aKey ifAbsent: [ self error: ''Property not found'' ]!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4973
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4974
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4975
!!PPContext methodsFor: ''initialization'' stamp: ''JanKurs 1/16/2014 11:24''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4976
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4977
	stream := nil.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4978
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4979
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4980
!!PPContext methodsFor: ''as yet unclassified'' stamp: ''JanKurs 3/19/2014 16:26''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4981
parsed: aPPParser at: anInteger result: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4982
	self halt.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4983
	^ anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4984
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4985
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4986
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 10/29/2013 10:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4987
root: aPPParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4988
	root := aPPParser !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4989
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4990
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 10/29/2013 10:13''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4991
root
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4992
	^ root !! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4993
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4994
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 1/15/2014 15:36''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4995
stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4996
	stream := aStream.!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4997
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4998
!!PPContext methodsFor: ''acessing'' stamp: ''JanKurs 1/16/2014 15:12''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  4999
stream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5000
	^ stream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5001
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5002
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5003
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5004
PPContext class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5005
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5006
!!PPContext class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5007
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5008
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5009
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5010
!!PPContext class methodsFor: ''as yet unclassified'' stamp: ''JanKurs 1/16/2014 14:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5011
on: aPPParser stream: aStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5012
	^ self basicNew 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5013
		initialize;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5014
		root: aPPParser;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5015
		stream: aStream asPetitStream;
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5016
		yourself!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5017
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5018
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5019
Object subclass: #PPMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5020
	instanceVariableNames: ''result count context''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5021
	classVariableNames: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5022
	poolDictionaries: ''''
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5023
	category: ''PetitParser-Core''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5024
!!PPMemento commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5025
PPMemento is an internal class used by PPMemoizedParser to cache results and detect left-recursive calls.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5026
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5027
Instance Variables:
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5028
	result	<Object>	The cached result.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5029
	count	<Integer>	The number of recursive cycles followed.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5030
	position	<Integer>	The position of the cached result in the input stream.!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5031
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5032
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5033
!!PPMemento methodsFor: ''accessing'' stamp: ''JanKurs 1/15/2014 16:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5034
contextMemento: aPPContextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5035
	context  := aPPContextMemento 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5036
!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5037
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5038
!!PPMemento methodsFor: ''accessing'' stamp: ''JanKurs 1/15/2014 16:09''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5039
contextMemento
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5040
	^ context!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5041
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5042
!!PPMemento methodsFor: ''accessing'' stamp: ''lr 4/24/2008 10:15''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5043
result
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5044
	^ result!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5045
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5046
!!PPMemento methodsFor: ''accessing'' stamp: ''lr 4/22/2008 18:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5047
result: anObject
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5048
	result := anObject!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5049
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5050
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5051
!!PPMemento methodsFor: ''accessing-readonly'' stamp: ''lr 4/22/2008 18:23''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5052
count
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5053
	^ count!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5054
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5055
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5056
!!PPMemento methodsFor: ''initialization'' stamp: ''lr 4/22/2008 18:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5057
initialize
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5058
	count := 0
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5059
	!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5060
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5061
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5062
!!PPMemento methodsFor: ''actions'' stamp: ''lr 4/22/2008 18:20''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5063
increment
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5064
	count := count + 1!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5065
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5066
"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5067
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5068
PPMemento class
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5069
	instanceVariableNames: ''''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5070
!!PPMemento class commentStamp: ''<historical>'' prior: 0!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5071
!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5072
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5073
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5074
!!PPMemento class methodsFor: ''instance creation'' stamp: ''lr 4/22/2008 18:21''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5075
new
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5076
	^ self basicNew initialize!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5077
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5078
PPToken initialize!!''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5079
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5080
!!SequenceableCollection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5081
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5082
	^ PPStream on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5083
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5084
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5085
!!Character methodsFor: ''*petitparser-core-operators'' stamp: ''lr 6/12/2010 09:04''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5086
- aCharacter
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5087
	"Create a range of characters between the receiver and the argument."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5088
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5089
	^ PPPredicateObjectParser between: self and: aCharacter!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5090
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5091
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5092
!!Character methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5093
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5094
	"Answer a parser that accepts the receiving character."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5095
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5096
	^ PPLiteralObjectParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5097
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5098
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5099
!!PositionableStream methodsFor: ''*petitparser-core'' stamp: ''sback 9/3/2010 10:00''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5100
peekTwice
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5101
	"Answer what would be returned if the message next were sent to the 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5102
	receiver. If the receiver is at the end, answer nil."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5103
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5104
	| array |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5105
	self atEnd 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5106
		ifTrue: [^Array with: nil with: nil].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5107
	array := Array with: (self next) with: (self peek).
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5108
	position := position - 1.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5109
	^array!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5110
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5111
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5112
!!Stream methodsFor: ''*petitparser-core-converting'' stamp: ''lr 4/8/2010 14:46''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5113
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5114
	^ self contents asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5115
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5116
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5117
!!Symbol methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5118
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5119
	"Answer a predicate parser named after the receiving symbol. Possible symbols are the method selectors on the class-side of PPPredicateObjectParser."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5120
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5121
	^ PPPredicateObjectParser perform: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5122
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5123
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5124
!!String methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5125
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5126
	"Answer a parser that accepts the receiving string."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5127
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5128
	^ PPLiteralSequenceParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5129
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5130
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5131
!!BlockClosure methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:48''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5132
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5133
	"Answer a parser implemented in the receiving one-argument block."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5134
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5135
	^ PPPluggableParser on: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5136
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5137
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5138
!!UndefinedObject methodsFor: ''*petitparser-converting'' stamp: ''lr 11/29/2011 20:49''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5139
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5140
	"Answer a parser that succeeds and does not consume anything."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5141
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5142
	^ PPEpsilonParser new!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5143
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5144
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5145
!!Text methodsFor: ''*petitparser-core-converting'' stamp: ''lr 2/7/2010 20:53''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5146
asPetitStream
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5147
	^ string asPetitStream!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5148
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5149
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5150
!!Collection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5151
asChoiceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5152
	^ PPChoiceParser withAll: (self collect: [ :each | each asParser ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5153
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5154
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5155
!!Collection methodsFor: ''*petitparser-core-converting'' stamp: ''lr 11/29/2011 20:38''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5156
asSequenceParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5157
	^ PPSequenceParser withAll: (self collect: [ :each | each asParser ])!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5158
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5159
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5160
!!Object methodsFor: ''*petitparser-core-testing'' stamp: ''lr 8/6/2010 16:44''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5161
isPetitParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5162
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5163
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.312417 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5164
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5165
!!Object methodsFor: ''*petitparser-core-converting'' stamp: ''lr 12/18/2011 15:58''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5166
asParser
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5167
	"Answer a parser accepting the receiving object."
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5168
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5169
	^ PPPredicateObjectParser expect: self!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5170
''From Pharo3.0 of 18 March 2013 [Latest update: #30854] on 22 August 2014 at 8:49:56.314418 pm''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5171
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5172
!!Object methodsFor: ''*petitparser-core-testing'' stamp: ''lr 2/7/2010 20:54''!!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5173
isPetitFailure
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5174
	^ false!! !!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5175
'
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5176
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5177
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5178
smalltalkObjectMethods
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5179
	^ Object allMethods collect: [ :m | m sourceCode ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5180
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5181
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5182
smalltalkSourcesBig
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5183
	^ ((Smalltalk allClasses copyFrom: 1 to: 30) collect: [ :c |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5184
			c allMethods collect: [ :m | m sourceCode ]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5185
	  ]) gather: [:each | each ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5186
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5187
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5188
workingJavaInDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5189
	| sources parser |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5190
	"return only such a files, that can be parsed by PPJavaSyntax"
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5191
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5192
	javaCache ifNil: [ javaCache := Dictionary new ].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5193
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5194
	^ javaCache at: directory ifAbsentPut: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5195
		sources := self javaInDirectory: directory.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5196
		parser := PPJavaSyntax new.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5197
	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5198
		sources select: [ :source | ([parser parse: source ] on: Error do: [ PPFailure new ]) isPetitFailure not ]	
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5199
	]
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5200
! !
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5201
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5202
!PPCBenchmarkResources methodsFor:'private utilities'!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5203
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5204
files: files withExtension: extension
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5205
	^ files select: [ :f | f extension = extension ] 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5206
!
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5207
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5208
readDirectory: directory
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5209
	| file |
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5210
	file := directory asFileReference.
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5211
	file exists ifTrue: [ 
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5212
		^ file allFiles
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5213
	].
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5214
	^ #()
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5215
! !
b2f2f15cef26 Moved benchmarks to a separate package
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
  5216