给出pascal语言的文法
时间: 2023-07-27 07:29:31 浏览: 47
Pascal语言的文法比较复杂,这里只给出一个大致的概述:
```
<program> ::= program <program_name> ";" <block> "."
<program_name> ::= <identifier>
<block> ::= <variable_declaration_part> <function_declaration_part> <compound_statement>
<variable_declaration_part> ::= "var" <variable_declaration> {<variable_declaration>;}
<variable_declaration> ::= <identifier_list> ":" <type>
<identifier_list> ::= <identifier> {"," <identifier>}
<type> ::= <simple_type> | <structured_type>
<simple_type> ::= <scalar_type> | <subrange_type> | <type_identifier>
<scalar_type> ::= "integer" | "real" | "boolean" | "char"
<subrange_type> ::= <constant> ".." <constant>
<type_identifier> ::= <identifier>
<structured_type> ::= <array_type> | <record_type>
<array_type> ::= "array" "[" <index_type> {"," <index_type>} "]" "of" <type>
<index_type> ::= <simple_type>
<record_type> ::= "record" {<variable_declaration>;} "end"
<function_declaration_part> ::= {<function_declaration>;}
<function_declaration> ::= <function_heading> ";" <block> ";" | <procedure_heading> ";" <block> ";"
<function_heading> ::= "function" <identifier> [<formal_parameter_list>] ":" <type>
<formal_parameter_list> ::= "(" [<parameter_list>] ")"
<parameter_list> ::= <parameter> {";" <parameter>}
<parameter> ::= <identifier_list> ":" <type_identifier>
<procedure_heading> ::= "procedure" <identifier> [<formal_parameter_list>]
<compound_statement> ::= "begin" {<statement>;} "end"
<statement> ::= <simple_statement> | <structured_statement>
<simple_statement> ::= <assignment_statement> | <procedure_call_statement> | <exit_statement> | <empty_statement> | <io_statement>
<assignment_statement> ::= <variable> ":=" <expression>
<variable> ::= <identifier> | <indexed_variable> | <field_designator>
<indexed_variable> ::= <variable> "[" <expression> {"," <expression>} "]"
<field_designator> ::= <variable> "." <identifier>
<expression> ::= <simple_expression> [<relational_operator> <simple_expression>]
<simple_expression> ::= [<sign>] <term> {<adding_operator> <term>}
<sign> ::= "+" | "-"
<term> ::= <factor> {<multiplying_operator> <factor>}
<factor> ::= <variable> | <constant> | "(" <expression> ")" | <not_factor>
<not_factor> ::= "not" <factor>
<constant> ::= <integer_constant> | <real_constant> | <string_constant> | <char_constant> | <boolean_constant>
<integer_constant> ::= <digit> {<digit>}
<real_constant> ::= <digit> {<digit>} "." {<digit>} [<exponent>]
<exponent> ::= "e" [<sign>] <digit> {<digit>}
<boolean_constant> ::= "true" | "false"
<string_constant> ::= "'" {<character>} "'"
<char_constant> ::= "'" <character> "'"
<character> ::= <letter> | <digit>
<relational_operator> ::= "=" | "<>" | "<" | "<=" | ">" | ">="
<adding_operator> ::= "+" | "-" | "or"
<multiplying_operator> ::= "*" | "/" | "div" | "mod" | "and"
<structured_statement> ::= <compound_statement> | <conditional_statement> | <repetitive_statement>
<conditional_statement> ::= "if" <expression> "then" <statement> ["else" <statement>]
<repetitive_statement> ::= <while_statement> | <repeat_statement> | <for_statement>
<while_statement> ::= "while" <expression> "do" <statement>
<repeat_statement> ::= "repeat" {<statement>;} "until" <expression>
<for_statement> ::= "for" <control_variable> ":=" <for_list> "do" <statement>
<control_variable> ::= <identifier>
<for_list> ::= <initial_value> ["to" <final_value>] | <initial_value> "downto" <final_value>
<initial_value> ::= <expression>
<final_value> ::= <expression>
<procedure_call_statement> ::= <identifier> [<actual_parameter_list>]
<actual_parameter_list> ::= "(" [<expression_list>] ")"
<expression_list> ::= <expression> {"," <expression>}
<exit_statement> ::= "exit" [<expression>]
<empty_statement> ::= ";"
<io_statement> ::= <write_statement> | <writeln_statement>
<write_statement> ::= "write" <output_parameter> {"," <output_parameter>} | "write" "(" <output_parameter> {"," <output_parameter>} ")"
<writeln_statement> ::= "writeln" [<output_parameter> {"," <output_parameter>}]
<output_parameter> ::= <expression> | <string_constant>
```
这个文法描述了Pascal语言的语法规则。其中,各个符号的含义可以在Pascal语言的语法定义中找到详细的解释。