FreeBASIC grammar
 
语法符号

生产格式
left hand side :右手边

:应该被看作“被定义为”。

一个生产的右手端被一个终止。

italics 中的一个字代表制作的名称(左侧)
手边生产)。

很少有运算符用于描述FreeBASIC语法。

操作者含义
.任何角色
*0或以上(重复)
+1个以上(重复)
?可选(选择)
()分组
|分离器(分离替代品)
分号生产结束


出现在生产的右侧的任何符号
这不是一个运算符并且不出现在italics
代表自己并出现胆大.
规则右侧的符号可以指生产。
这些参考文献是italics .

对于导航目的,参考是生产的链接
被引用。

阅读语法时请注意FreeBASIC是不区分大小写的
语言。

所提供的语法不是FreeBASIC语言的精确语句。

直接去:
program
expression

令牌

white : \t |
any_char &NBSP&NBSP&NBSP 任何有效的字符;
eol :    \n|\r|\n\r;
statement_separator : ( : | eol )+;
dot :&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP .;
sign :&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP +| -;
alpha :&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP a| b| c| d| e| f| g| h| i| j| k| l| m| n| p| q| r| s| t| v| w| x| y| z;
digit :&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP 0| 1| 2| 3| 4| 5| 6| 7| 8| 9;
hexdigit &NBSP&NBSP&NBSP a| b| c| d| e| f| digit ;
octdigit &NBSP&NBSP&NBSP 0| 1| 2| 3| 4| 5| 6| 7;
bindigit :   0|1;
alphadigit :  alpha | digit ;
integer_suffix &NBSP&NBSP&NBSP&NBSP&NBSP %| &| l| u| ul| ll| ULL;
floating_point_suffix :     !|#|f;
suffix :&NBSP&NBSP&NBSP&NBSP&NBSP&NBSP integer_suffix | floating_point_suffix | $;
expchar :  d|e;
operator
: = | < | > |<> |+ | - | * | @
& | -> | / | \ | ^ | 并且
否则别指望no | | or | XOR | 当量 | 恶魔
+= | -= | *= | /= | \= | ^= | &= |
和= | or= | XOR = | 当量= | 小鬼=
| 删除 | delete[] | | procptr
varptr | Srptr | 的sizeof | [] | ()
;

binary_operator
: = | < | > |<> |+ | - |
& | -> | / | \ | ^
+= | -= | *= | /= | \= | ^= | &= |
和= | or= | XOR = | 当量= | 小鬼=
并且 | 否则别指望no
;

identifier
:&NBSP&NBSP(alpha )(alphadigit | _)*
NBSP&NBSP _({989 796 039}| {989 796 692})+
;

literal
integer_literal
decimal_integer : digit +;
hexadecimal integer : &hhexdigit +;
octal_integer : &ooctdigit +;
binary_integer : &bbindigit +;

floating_literal
: digit +(dot (digit +)?)?(exp_char ?(sign ?digit +)?)?suffix ?
NBSP(dot digit +)?)?(exp_char ?(sign digit +)?)?suffix
;

string_literal
: (!|$)?"(escape_sequence |""|any_char )*" (white *string_literal )*
;

escape_sequence
simple_escape_sequence
: \a|\b|\f|\l|\n|\r|\t|\v|\\|\'|\\"
;

unicode_escape_sequence
decimal_escape_sequence
hexadecimal_escape_sequence
octal_escape_sequence
binary_escape_sequence
评论

comment
: ( ' | REM) (($directive ) | (any_char_but_eol*))
;
multiline_nested_comment
: /' ( .| multiline_nested_comment )* '/;

Toplevel的

program
: line * EOF?
;
line
label
: identifier :
;

statement
(declaration | procedure_call_or_assign | compound_statement | quirk_statement | assembler_block | assignment )?
(statement_separator statement )*
;

declaration
procedure_call_or_assign
: 调用 identifier ((procedure_parameter_list ))?
identifier procedure_parameter_list ?
(identifier | 功能 | 操作者 | 属性) = expression
;

compound_statement
namespace_statement
: 命名空间 identifier (别号 string_literal )? (declaration | namespace_statement )* 结束 命名空间
;

scope_statement : 范围 statement_separator statement * 结束 范围
;

if_statement
short_if_statement
其他 statement_separator statement *
(eol | 万一 | 万一)
;

long_if_statement
statement *
elseif_block *
(其他 statement_separator statement *)?
(结束 if|万一)
;

elseif_block
for_statement
: 对于 identifier (as scalar )? = expression to expression ( expression )?
(statement |退出(, 对于)* | 继续 (, 对于)*)* 下一个 identifier (, identifier )* statement_separator
;

do_statement
: do (直到|) expression (statement |退出做 (, do)* | 继续做 (, do)*)* 循环
do (statement |退出做 (, do)* | 继续做 (, do)*)* 循环 (直到|) expression statement_separator
;

while_statement
(statement | 退出时 (, )* | 继续 (, )*)*
WEND
;

select_statement
: 选择案例 (as 常量) expression case_statement * 其他情况 statement_separator statement * 结束选择
;
case_statement
case_expression
: expression | expression to expression | is (> | < | >= | <= | = | <>) expression ;

assembler_block
: comment ? (asm_code comment ? eol )+ 结束asm
;

assignment
variable
const_declaration
: 常量 (as symbol_type )? const_assign (, const_assign )*
;

type_or_union_declaration
type_declaration
: 类型 identifier (别号 string_literal )? (领域 = expression )? (comment )? statement_separator
结束 类型
;

union_declaration
: 联盟 identifier (别号 string_literal )? (领域 = expression )? (comment )? statement_separator
union_member_declaration +
结束 联盟
;

type_member_declaration
: ( (联盟|类型) comment ? statement_separator element_declaration +
结束 (联盟|类型)
)
element_declaration
asas_element_declaration
;


variable_declaration
: (REDIMen 保留?|暗淡|共同) 共享? symbol_type
外部 进口? symbol_type 别号 string_literal
静态的 symbol_type
;

symbol_type
: 常量? 无符号?
(
scalar
(* integer_literal )?
wstring的 (* integer_literal )?
user_defined_type
功能 (( parameters )) (as symbol_type )
(( parameters ))
)(常量? (PTR|指针))*
;

scalar
: 字节
UBYTE

USHORT
整数
uinteger
Longint型
ulongint

ULONGen


;

parameters
: parameter (, parameter )*
;

parameter
: (BYVAL|按地址)? (identifier (( ))?)? as symbol_type (= literal )?
;


user_defined_type
procedure_declaration
procedure_parameter_list
procedure_parameter
: BYVAL? (identifier (( ))? | expression )
;


表达式

expression
boolean_expression
: logical_expression ( ( 并且 | 否则别指望no ) logical_expression )*
;

logical_expression
: logical_or_expression ( (XOR | 当量 | 恶魔) logical_or_expression )*
;

logical_or_expression
logical_and_expression
relational_expression
concatenation_expression
add_expression)*
;

)*
;

)*
;

( (shl | shr) * ( (shl | shr) * ( (shl | shr) * )*
;

mod_expression
: = integer_division_expression( mod integer_division_expression )*
;

integer_division_expression
: multiplication_expression ( \ multiplication_expression )*
;

multiplication_expression
: exponentiation_expression ( (* | /) exponentiaton_expression )*
;

exponentiation_expression
: prefix_expression ( ^ prefix_expression )*
;

prefix_expression
: (-|+) exponentiation_expression
relational_expression
highest_precedence_expression
;

highest_precedence_expression
: address_of_expression
( dereference_expression | casting_expression | pointer_type_casting_expression | parenthesised_expression )
anonymous_udt
atom
;

address_of_expression
varptr(highest_precedence_expression )
procptr ( identifier (())? )
@ (identifier (())? | highest_precedence_expression )
SADD|Srptr ( expression )
;

dereference_expression
: *+ highest_precedence_expression
;

casting_expression
: ( symbol_type , expression )
;


quirk_function
: quirk_function_name procedure_parameter_list
;

quirk_function_name
: MKDen | MKI | MKL | mklongint | mkshort
CVDen | CVIen | CVL | cvlongint | CVS | cvshort
ASC | CHR | INSTR | instrev | LCASE | 剩下 | | LSETno | LTRIM | | | RSET | RTRIM | 空间 | | UCASE | WCHR | 厌恶 | wstring的
ABS | SGN | 固定 | 压裂 | | 的sizeof, | ASIN | COS | ACOS | Tan | ATN | SQR | 日志 | EXP | ATAN2 | INT
窥视
LBOUND | UBOUND
寻求 | 输入 | 打开 | | 得到 | | 名称

IIF
va_first
cbyte | cshort | CINTen | CLNG | clngint | cubyteru-Latn | cushort | cuint | culng | culngint | RTA | cdbl | 蜗牛 | cunsg
类型
视图 | 宽度 | 颜色 | 屏幕
;



quirk_statement
: jump_statement
print_statement
data_statement
array_statement
line_input_statement
input_statement
poke_statement
file_statement
write_statement
error_statement
on_statement
view_statement
mid_statement
lrset_statement
width_statement
color_statement
gfx_statement
;

jump_statement
: 去en identifier
;

print_statement
: (打印 | ?) (# expression ,)? (运用 expression ;)? (expression ? ; | , )*;

data_statement
: 恢复 identifier
variable (, variable )*
数据 literal (, literal )*
;

array_statement
: 抹去 variable (, variable )*
交换 variable , variable
;

line_input_statement
: 线 输入 ;? (# expression | expression ?) (, | ; )? variable ?
;

input_statement
: 输入 ;? ((# expression | string_literal ) (, | ;))? variable (, variable )*
;

poke_statement
: expression , expression
;

file_statement
: (#? expression ) (, #? expression )*
寻求 #? expression , expression
# expression , expression ? , expression
得到 # expression , expression ? , variable
(|开锁) #? expression , expression (to expression )?
名称 expression as expression
;

write_statement
: (# expression )? (expression ? , )*
;

error_statement
: 错误 expression
= expression
;

on_statement
on本地? (错误| expression 去en标识符
;

view_statement
: 视图 (打印 (expression to expression )?)
;

mid_statement
: ( expression , expression (, expression ) = expression
;

lrset_statement
: LSETno|RSET highest_precedence_expression , highest_precedence_expression
;

width_statement
: 宽度 expression , expression
宽度 LPRINT expression
宽度 (# expression | expression ), expression
;

color_statement
: 颜色 expression , expression
;

gfx_statement
: PSET ( expression , )? ? ( expression , expression ) (, expression )?
线 ( expression , )? ? (( expression , expression ) )? - ? ( expression , expression ) (, expression ? (, string_literal ? (, expression )?)?)?
( expression , )? ? ( expression , expression ) , expression ((, expression ? (, expression ? (, expression ? (, expression (, expression )? )? )?)?)?)?
涂料 ( expression , )? ? ( expression , expression ) (, expression ? (, expression ? ) )
( expression , )? expression
视图 (屏幕? ( expression , expression ) - ( expression , expression ) (, expression ? (, expression )?)? )?
调色板 得到? ((运用 variable ) | (expression , expression (, expression , expression )?)?)
( expression , )? ? ( expression , expression ) , ( ( expression , expression ) - ( expression , expression ) ,)? variable (, expression (, expression )?)?
得到 ( expression , )? ? ( expression , expression ) - ? ( expression , expression ) , variable
屏幕 (integer_literal | ((expression (((, expression )? , expression )? expression )? , expression ))
screenres expression , expression (((, expression )? , expression )? , expression )?
;