[fpc-devel] FPC Syntax

Michael Van Canneyt michael at freepascal.org
Mon May 30 10:32:27 CEST 2005



On Sun, 29 May 2005, Hans-Peter Diettrich wrote:

> 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?

Yes, please. All corrections to the documentation are welcome.

But when reporting errors, don't use page numbers, page numbers vary;
use section/subsection/paragraph numbering.

Michael.




More information about the fpc-devel mailing list