mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-24 22:36:29 +02:00
178 lines
5.0 KiB
ObjectPascal
178 lines
5.0 KiB
ObjectPascal
program &tampersand{ TODO findrefs:0,0};
|
|
{$mode ObjFPC}{$H+}
|
|
uses
|
|
&procedure {completion:procedure|completion:-1=procedure|completion:+1=procedure|declaration:procedure/procedure}
|
|
;
|
|
|
|
type
|
|
xyz = integer;
|
|
&var{declaration:procedure/&procedure.var} // previous declaration
|
|
=
|
|
(&array{declaration:tampersand/var},
|
|
&begin{declaration:tampersand/var},
|
|
foo{declaration:tampersand/var},
|
|
&bar{declaration:tampersand/var}
|
|
);
|
|
&end{declaration:procedure/&procedure.end} // previous declaration
|
|
=
|
|
array of (&abc{declaration:tampersand/end},
|
|
def{declaration:tampersand/end},
|
|
&uses{declaration:tampersand/end}
|
|
);
|
|
&program =
|
|
set of (&set{declaration:tampersand/program},
|
|
&_{declaration:tampersand/program}
|
|
);
|
|
|
|
&for = boolean;
|
|
&if =
|
|
class
|
|
public type
|
|
&for{declaration:tampersand/for} // previous declaration
|
|
= integer;
|
|
end;
|
|
|
|
&record = record
|
|
abc:
|
|
integer;
|
|
&array:
|
|
record
|
|
x,y,&case:
|
|
&if{declaration:tampersand/if}.&for{completion:&for|completion:-1=&for|declaration:tampersand/if.for};
|
|
end
|
|
end;
|
|
|
|
|
|
function &function(
|
|
&type: &var{completion:&var,xyz|completion:-1=&var,xyz|declaration:tampersand/var};
|
|
&begin: &end{declaration:tampersand/end}
|
|
): &program{completion:&program,xyz|completion:-1=&program,xyz|declaration:tampersand/program};
|
|
var
|
|
&then: &var;
|
|
&if: &program;
|
|
begin
|
|
&then {guesstype:&tampersand/var}
|
|
:= &type;
|
|
&if{guesstype:&tampersand/program}
|
|
:= &result;
|
|
end;
|
|
|
|
function fun(
|
|
&type: &tampersand.&var{completion:&var,xyz|completion:-1=&var,xyz|declaration:tampersand/var};
|
|
&begin: tampersand.&end{declaration:tampersand/end}
|
|
): &tampersand{completion:&tampersand,&program,xyz|completion:-1=&tampersand,&program,xyz|declaration!:&tampersand}
|
|
.&program{completion:&program,xyz|completion:-1=&program,xyz|declaration:tampersand/program};
|
|
var
|
|
&then: &var;
|
|
&if: &program;
|
|
begin
|
|
&then {guesstype:&tampersand/var}
|
|
:= &type;
|
|
&if{guesstype:&tampersand/program}
|
|
:= &result;
|
|
end;
|
|
|
|
function &name(
|
|
&type: &procedure.&var{declaration:procedure/&procedure.var};
|
|
&begin: &procedure.&end{declaration:procedure/&procedure.end}
|
|
): &procedure.&interface{declaration!:procedure/&procedure.interface};
|
|
var
|
|
&then: &procedure.&var;
|
|
&if: &procedure.&interface;
|
|
begin
|
|
&then {guesstype:&procedure/var}
|
|
:= &type;
|
|
&if{guesstype:&procedure/interface}
|
|
:= &result;
|
|
end;
|
|
|
|
|
|
var
|
|
&class:
|
|
&program{completion:&tampersand,&program,xyz|completion:-1=&tampersand,&program,xyz|declaration:tampersand/program};
|
|
fun1:
|
|
&tampersand.&program{declaration:tampersand/program};
|
|
fun2:
|
|
&program{declaration:tampersand/program};
|
|
n1, n2:
|
|
&procedure.&interface{declaration!:procedure/&procedure.interface};
|
|
&const:
|
|
&end{declaration:tampersand/end};
|
|
&case, cast:
|
|
&record{declaration:tampersand/record};
|
|
&then:
|
|
integer;
|
|
begin
|
|
&class{guesstype:&tampersand/program}
|
|
:=
|
|
&function{completion:&tampersand,&function,fun,&program,xyz|completion:-1=&tampersand,&function,fun,&program,xyz|completion:+11=&function,fun,!&program,!program,!xyz|declaration!:tampersand/&function}
|
|
(&array{completion:&tampersand,&function,fun,&array,xyz|completion:-1=&tampersand,&function,fun,&array,xyz|completion:+1=!&function,!function,!fun,&array,!xyz|declaration!:tampersand/var},
|
|
&const
|
|
);
|
|
fun1
|
|
:=
|
|
&fun{completion:&tampersand,&function,fun,&program,xyz|completion:-1=&tampersand,&function,fun,&program,xyz|completion:+11=&function,fun,!&program,!program,!xyz|declaration!:tampersand/fun}
|
|
(
|
|
&var.&begin,
|
|
[&tampersand.&uses, &uses]
|
|
);
|
|
fun2
|
|
:=
|
|
fun(
|
|
&foo,
|
|
[def, &def, abc, &abc]
|
|
);
|
|
&name(
|
|
&procedure.&var.&foo,
|
|
[&procedure.&def]
|
|
);
|
|
name(
|
|
&procedure.&var.foo,
|
|
[&procedure.def]
|
|
);
|
|
n1
|
|
:=
|
|
&other{completion:&procedure,&tampersand,other,more,&program,xyz|completion:-1=&procedure,&tampersand,other,more,&program,xyz|completion:+11=other|declaration!:procedure/&procedure.other}
|
|
(
|
|
&procedure.&var.&end,
|
|
[&procedure.def]
|
|
);
|
|
n2
|
|
:=
|
|
other(
|
|
&procedure.&var.&end,
|
|
[&procedure.&def]
|
|
);
|
|
&more(
|
|
&procedure.&var.&foo,
|
|
[new]
|
|
);
|
|
|
|
cast{completion:&case,cast,n1|completion:-1=&case,cast,n1|completion:+1=&case,&const,!then,!&then}.
|
|
abc :=&2;
|
|
cast.&abc :=2;
|
|
cast.&array:=&case.&array;
|
|
cast.&array.x:=2;
|
|
cast.&array.&case:=2;
|
|
|
|
&cast{completion:&case,cast,n1|completion:-1=&case,cast,n1|completion:+1=&case,&const,!then,!&then}.
|
|
abc :=2;
|
|
&cast.&abc :=2;
|
|
&cast.&array:=&case.&array;
|
|
&cast.&array.x:=2;
|
|
&cast.&array.&case:=2;
|
|
|
|
&case.abc :=2;
|
|
&case.&abc :=&2;
|
|
&case.&array:=cast.&array;
|
|
&case.&array.x:=2;
|
|
&then { TODO: guesstype:tampersand/if.for}
|
|
:=
|
|
&case{completion:&case|completion:-1=&case|completion:+1=&case,&const,!then,!&then}.
|
|
&array{completion:&array,abc|completion:-1=&array,abc|completion:+1=&array,abc|completion:+2=&array,!abc|declaration:tampersand/record.array}.
|
|
&case{completion:&case,x,y|completion:-1=&case,x,y|completion:+1=&case,!x,!y|declaration:tampersand/record.array.case}
|
|
;
|
|
|
|
end.
|
|
|