001 linux命令格式--BNF范式

一、基本定义

Linux的命令格式其实也是依据BNF范式(巴科斯范式)的,BNF规定的是推导规则的集合,可简单的写为

<符号> ::= <使用符号的表达式> 或 
symbol := alternative1 | alternative2 ...

每条规则用::=或:=来声明,左侧的符号必须被右侧的表达式,或表达式的可选项替代。表达式由一个符号序列,或用指示选择的竖杠'|' 分隔的多个符号序列构成。

其中这些符号序列也可以是通过::=相同规则定义的一种可能替代。

从未在左端出现的符号叫做终结符,之所以叫做终结符是因为没有针对他们的书写规范,他们是书写过程的终止(符号通常被叫做非终止符,也有人叫非终端)。

 

二、BNF规则

BNF巴科斯范式,规则如下

在双引号中的字("word")代表着这些字符本身。 
在双引号外的字(有可能有下划线)代表着语法部分。 
括号 () 表示分组的意思 
尖括号( < > )内包含的为必选项,尖括号括起来的是非终结符 
方括号( [ ] )内包含的为可选项。 
大括号( { } )内包含的为可重复0至无数次的项。 
竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。 
::= 是“被定义为”的意思。

例linux下的某些命令的写法:

./rte-app -c COREMASK -n NUM [-b <domain:bus:devid.func>] [--socket-mem=MB,...] [-m MB] [-r NUM] [-v] [--file-prefix] [--proc-type <primary|secondary|auto>]

上面的[ ]中的是可选项目,-b是命令,若带有这个命令,则必须有<domain:bus:devid.func>中的条目

 

三、扩展

1)C语言的声明语句可以用BNF描述:

<声明语句> ::= <类型><标识符>; | <类型><标识符>[<数字>];

1、这一句中<声明语句>这个非终结符被定义成了两种形式(上面用|隔开的两部分),同时在这里引入了三个终结符: 分号; 左方括号[,右方括号 ]。

2、这一语句的实际含义可以理解为:声明语句定义形式为:类型+标识符,或类型+标识符+数字

下面可以进一步分解该描述中的描述符,如下:

<类型> ::= <简单类型> | <指针类型> | <自定义类型> 
<指针类型> ::= <简单类型> * | <自定义类型> * 
<简单类型> ::= int|char|double|float|long|short|void 
<自定义类型> ::= enum<标识符>|struct<标识符>|union<标识符>|<标识符>

 

2)Java语言中的For语句的实例:

FOR_STATEMENT ::= "for" "(" ( (variable_declaration ";") | ( expression ";" ) | ";" ) [ expression ] ";" [ expression ] ")" statement

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值