pascal_features.htm

来自「Delphi脚本控件」· HTM 代码 · 共 824 行 · 第 1/2 页

HTM
824
字号
<font color="blue"><b>type</b></font>
  TMyArray[1..2, 3..5] <font color="blue"><b>of</b></font> TPoint;
</pre>
</blockquote>

This kind of arrays is derived from native arrays at compile-time. For example, declaration 

<blockquote>
<pre>
<font color="blue"><b>type</b></font>
  TMyArray = <font color="blue"><b>array</b></font> [3..5] <font color="blue"><b>of</b></font> Integer;
</pre>
</blockquote>

is equivalent to

<blockquote>
<pre>
<font color="blue"><b>type</b></font> TMyArray = <font color="blue"><b>record</b></font>
  <font color="blue"><b>var</b></font> L = 3;
  <font color="blue"><b>var</b></font> H = 5;
  <font color="blue"><b>var</b></font> fItems[H - L];
  <font color="blue"><b>procedure</b></font> Initialize;
  <font color="blue"><b>var</b></font>
    I: Integer;
  <font color="blue"><b>begin</b></font>
    <font color="blue"><b>for</b></font> I:=L <font color="blue"><b>to</b></font> H <font color="blue"><b>do</b></font>
     fItems[I - L] := 0;
  <font color="blue"><b>end</b></font>;
  <font color="blue"><b>function</b></font> GetItem(I: Integer): Integer;
  <font color="blue"><b>begin</b></font>
    result := @ fItems[I - L];
  <font color="blue"><b>end</b></font>; 
  <font color="blue"><b>procedure</b></font> SetItem(I: Integer; Value: Integer);
  <font color="blue"><b>begin</b></font>
    fItems[I - L] := Value;
  <font color="blue"><b>end</b></font>;
  <font color="blue"><b>property</b></font> Items[I: Integer]: Integer; read GetItem write SetItem; <font color="blue"><b>default</b></font>;
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>


</li>

<ol>
</li>

</ul>

<li>
You can allocate your arrays dynamically:

<blockquote>
<pre>
<font color="blue"><b>procedure</b></font> P(N: Integer);
<font color="blue"><b>var</b></font> 
  A: <font color="blue"><b>array</b></font>[3..N] <font color="blue"><b>of</b></font> Double;
<font color="blue"><b>begin</b></font>
...............
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>

</li>


</ul>


<a name="Namespaces">
<h4>
Namespaces
</h4>

paxPascal supports namespaces. For example:

<blockquote>
<pre>
<font color="blue"><b>namespace</b></font> Shapes
  <font color="blue"><b>type</b></font>
    TPoint = <font color="blue"><b>class</b></font>(TObject)
       X, Y: Integer;
       <font color="blue"><b>constructor</b></font> Create(X, Y: Integer);
       <font color="blue"><b>begin</b></font>
         <font color="blue"><b>inherited</b></font> Create;
         Self.X := X;
         Self.Y := Y;
       <font color="blue"><b>end</b></font>;
    <font color="blue"><b>end</b></font>;

    TCircle = <font color="blue"><b>class</b></font>(TPoint)
      R: Integer;
      <font color="blue"><b>constructor</b></font> Create(X, Y, R);
    <font color="blue"><b>end</b></font>;
    
  <font color="blue"><b>constructor</b></font> TCircle.Create(X, Y, R);
  <font color="blue"><b>begin</b></font>
    <font color="blue"><b>inherited</b></font> Create(X, Y);
    Self.R := R;
  <font color="blue"><b>end</b></font>;

<font color="blue"><b>end</b></font>;

<font color="blue"><b>var</b></font>
  Point = Shapes.TPoint.Create(3, 5);
  Circle = Shapes.TCircle.Create(3, 5, 7);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>print</b></font> Point, Circle;
<font color="blue"><b>end</b></font>.
</pre>
</blockquote>

<a name="Regular Expressions">
<h4>
Regular Expressions
</h4>

paxPascal supports the regular expression literals. For example:

<blockquote>
<pre>
<font color="blue"><b>var</b></font> r = /[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+/g;
    s = <font color="Red">'My e-mails are ab@virtlabor.donbass.com and ppusr154@ints.net'</font>;
<font color="blue"><b>repeat</b></font>
 <font color="blue"><b>if</b></font> r.exec(s).length = 0 <font color="blue"><b>then</b></font>
   <font color="blue"><b>Break</b></font>
 <font color="blue"><b>else</b></font>
 <font color="blue"><b>begin</b></font>
   writeln(r[0]);
   writeln(r.MatchPos[0]);
   writeln(r.MatchLen[0]);
   writeln(r.LastIndex);
 <font color="blue"><b>end</b></font>;
<font color="blue"><b>until</b></font> false;
</pre>
</blockquote>

Output:

<blockquote>
<pre>
ab@cable.netlux.org
16
24
41
ppusr154@ints.net
45
17
63
</blockquote>
</pre>


<a name="Strings">
<h4>
Strings
</h4>

Double quoted string constants are allowed.

<blockquote>
<pre>
<font color="blue"><b>const</b></font> s: <font color="blue"><b>String</b></font> = "My name is 's'  ";
</pre>
</blockquote>

You can use backslasges to represent special characters:

<blockquote>
<pre>
<font color="blue"><b>const</b></font> z: <font color="blue"><b>String</b></font> = 'Two \n lines';
</pre>
</blockquote>

Long string literals are allowed:


<blockquote>
<pre>
<font color="blue"><b>const</b></font> s: <font color="blue"><b>String</b></font> = """This 
is a long
string literal""";
</pre>
</blockquote>

You can use string literals with parameters. For example:


<blockquote>
<pre>
<font color="blue"><b>print</b></font> '''

First Name: %s
Last Name: %s

''' <font color="blue"><b>with</b></font> ['Ivan', 'Sidorov'];
</pre>
</blockquote>


It is equivalent to:

<blockquote>
<pre>
<font color="blue"><b>print</b></font> Format ('''

First Name: %s
Last Name: %s

''', ['Ivan', 'Sidorov'] );
</pre>
</blockquote>


<a name="Forward Declarations">
<h4>
Forward Declarations
</h4>

 
You need no to use forward declarations in paxPascal. In another words, you can use a function 
call before declaration of the function. For example:

<blockquote>
<pre>
Fact(5);
<font color="blue"><b>function</b></font> Fact(N: Integer): Integer;
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> N = 1 <font color="blue"><b>then</b></font>
    result := 1
  <font color="blue"><b>else</b></font>
    result := N * Fact(N - 1); 
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>

<a name="Control Structures">
<h4>
Control Structures
</h4>

The Break statement permits optional label that causes the flow of control to 
exit an outer for, while, or repeat statement and continue at the next statement.

<blockquote>
<pre>
<font color="blue"><b>var</b></font>
  I, J: Integer;
<font color="blue"><b>label</b></font>
  Outer;
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>print</b></font> 'Start';
  Outer:
  <font color="blue"><b>for</b></font> I:=1 <font color="blue"><b>to</b></font> 3 <font color="blue"><b>do</b></font>
    <font color="blue"><b>for</b></font> J:=1 <font color="blue"><b>to</b></font> 4 <font color="blue"><b>do</b></font>
    <font color="blue"><b>begin</b></font>
      <font color="blue"><b>if</b></font> (I = 2) <font color="blue"><b>and</b></font> (J = 3) <font color="blue"><b>then</b></font>
        <font color="blue"><b>Break</b></font> Outer;
      <font color="blue"><b>print</b></font> I, J;
    <font color="blue"><b>end</b></font>;
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>


Output:

<blockquote>
<pre>
11
12
13
14
21
22
</pre>
</blockquote>


The Continue statement permits optional label that causes
the flow of control to proceed to the next iteration of the outer for, while, or repeat statement.

<blockquote>
<pre>
<font color="blue"><b>var</b></font>
  I, J: Integer;
<font color="blue"><b>label</b></font>
  Outer;
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>print</b></font> 'Start';
  Outer:
  <font color="blue"><b>for</b></font> I:=1 <font color="blue"><b>to</b></font> 3 <font color="blue"><b>do</b></font>
    <font color="blue"><b>for</b></font> J:=1 <font color="blue"><b>to</b></font> 4 <font color="blue"><b>do</b></font>
    <font color="blue"><b>begin</b></font>
      <font color="blue"><b>if</b></font> (I = 2) <font color="blue"><b>and</b></font> (J = 3) <font color="blue"><b>then</b></font>
        <font color="blue"><b>Continue</b></font> Outer;
      <font color="blue"><b>print</b></font> I, J;
    <font color="blue"><b>end</b></font>;
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>


Output:

<blockquote>
<pre>
11
12
13
14
21
22
31
32
33
34
</pre>
</blockquote>

<a name="Embedding scripts into html pages">
<h4>
Embedding Scripts into Html Pages
</h4>

      
paxScript is consecutively developing in the direction of the internet programming. You can embed your
paxPascal scripts into html pages as easy as PHP scripts. Click <a href="demo_html.htm">here</a> to see a demo.


<a name="Operator Overloading">
<h4>
Operator Overloading
</h4>

paxPascal allows you to overload operators "+", "-", "*", "/", "mod", "shl", "shr", "=", "<>", ">", "<",
">=", "<=". Click <a href="demo_complex.htm">here</a>, to see an example.


<a name="LISPPA">
<h4>
LISPPA
</h4>

Like other paxScript languages, paxPascal supports <a href="lisppa.htm">LISPPA</a> technology (List 
Processing based on the Polymorphic Arrays), a new technology of the processing dynamic data structures 
without using pointers.


<a name="Syntax">
<h4>
Syntax
</h4>

Remember, that paxPascal program is list of statements. Therefore you can disregard Object Pascal
synax rules to make your scripts more laconic. For example, the following scripts are admissible:

<ul>

<li>
<blockquote>
<pre>
<font color="blue"><b>print</b></font> "Hello, world!";
</pre>
</blockquote>
</li>


<li>
<blockquote>
<pre>
<font color="blue"><b>type</b></font>
  TMyRec = <font color="blue"><b>record</b></font>
    X, Y: Integer;
  <font color="blue"><b>end</b></font>;
<font color="blue"><b>var</b></font>
  R: TMyRec;
<font color="blue"><b>begin</b></font>
  R.X := 10;
  Y.Y := 12;
<font color="blue"><b>end</b></font>;
</pre>
</blockquote>
</li>

<li>
<blockquote>
<pre>
<font color="blue"><b>record</b></font> TMyRec 
  X, Y: Integer;
<font color="blue"><b>end</b></font>;
<font color="blue"><b>var</b></font>
  R: TMyRec;
R.X := 10;
Y.Y := 12;
</pre>
</blockquote>
(this is equivalent of the script above).
</li>

</ul>

<p>
<HR>
<font size = 1 color ="gray">
Copyright &copy; 1999-2005
VIRT Laboratory. All rights reserved.
</font>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?