[fpc-devel] FPC Syntax
Hans-Peter Diettrich
DrDiettrich at compuserve.de
Sun May 29 10:01:10 CEST 2005
A friend has found some obvious errors in the FPC syntax description,
and I found some more errors. Here is our current list:
==== ==================================================================
page Expected Error Description
==== ==================================================================
p010:
in
characters: ";" is missing
character pair ".." is missing
========================================================================
p022:
Where is delphi real type Currency
========================================================================
p041
Normally a list of variables may be declared:
------------------------------------------------------------------------
variable_declaration =
list ":"
type [ ("=" typed_constant) | variable modifiers ] ";" .
--- should read ---
variable_declaration =
identifier_list ":"
type [ ("=" typed_constant) | variable modifiers ] ";" .
identifier_list =
identifier { "," identifier} .
DoDi:
Should read like [ "=" typed_constant ] | [ variable_modifiers ]?
Should distinguish single variables, with possible modifiers,
from variable list, with no(?) modifiers allowed?
========================================================================
p044:
the word "property" is missing
where is "stored" property
========================================================================
p048:
"object_type" is missing in 1st description
========================================================================
p055
class_reference_type
"class_type" is missing
========================================================================
p072
addressfactor
should read
address_factor
========================================================================
P069
expression : "*" should read "<" .
========================================================================
p087
formal parameter list
may by empty
========================================================================
p101
parameter_list
should read
formal_parameter_list
========================================================================
p108
where is VAR variable_declaration_part
========================================================================
p112
where is "resident" in exports clause
========================================================================
p113
where is "raise" in raise_statement
========================================================================
Sometimes:
integerconstant: p044, p059
integer_constant: p095, p112
Missing:
array_constant
constant
default_parameter_value
exception_instance
exception_statement
integer_constant
method_designator
procedural_constant
qualified_method_designator
record_constant
Assumed:
address_expression = expression .
address_constant = expression .
class_type_identifier = identifier .
constant_identifier = identifier .
function_identifier = identifier .
field_identifier = identifier .
interface_type_identifier = identifier .
integer_expression = expression .
method_identifier = identifier .
object_type_identifier = identifier .
octal_digit = "0".."7" .
parameter_type = identifier .
procedure_identifier = identifier .
qualified_method_identifier = identifier { "." identifier } .
result_identifier = identifier .
string_constant = character_string .
string_constant_declaration = identifier "=" character_string .
type_identifier = identifier .
unit_identifier = identifier .
variable = identifier .
variable_identifier = identifier .
variable_reference = identifier .
DoDi:
p013
"^"<letter> is missing as escaped character.
p015
All <address constant> etc. should be described.
(See above)
p017
What about type: <identifier> "=" "type" <typedef>?
(Delphi mode only?)
p020
In enum types both "=" and ":=" are accepted.
(IMO ":=" could be removed here)
p079
According to the examples the semicolon is a case
delimiter/terminator, not a separator.
The <else part> contains a <statement sequence>.
(The optional semicolon before "end" should be moved before "else").
The syntax of the Case statement has been seriously damaged by the
introduction of the Else part, this is a problem not only in the FPC
grammar. IMO the syntax diagram should be corrected, somehow, and the
quirks should be addressed in the comments.
p080:
What does this mean:
"The case statements can be compound statements (i.e. a begin..End
block)."
Do there exist cases where a compound statement can *not* replace a
statement?
About case and variant records:
Why is the syntax for Case labels different in Case statement and Record
types?
In the variant part of an record no ranges a..b are allowed. This IMO is
not a meaningful restriction, which requires different descriptions and
different handling in the compiler.
Should we continue to search for more errors?
DoDi
More information about the fpc-devel
mailing list