第三章 文法和语言

文法通常用G表示,语言通常用L表示。

字母表和符号串
字母表和符号串是构成文法和语言必不可少的要素。
字母表是元素的非空有穷集合,字母表中的元素称为符号,字母表也叫符号集。
我第一次把字母表理解成为了26个英文字母
但是不同的语言可以有不同的字母表
所以字母表可以是数字、字母、符号、保留字等。
并非局限于字母。
符号串是字母表中的符号组成的任何有穷序列

规则
也称重写规则、产生式、生成式,形如a->b,读作“a定义成b”。

文法G定义为四元组(VN、VT、P、S)
VN:非终结符集
VT:终结符集
P:规则的集合
S:识别符或者开始符

直接推导和规约
形如a->b是文法G的生成式,v=yad,w=ybd
v直接推导出w,w直接规约到v,记作v=>w

正闭包与闭包
一个集合的闭包比正闭包多一个空串
正闭包用A+表示,闭包用A表示
所以有:A
=A(A+)=(A+)A

句型和句子
句子是句型的特殊形式
设G[s]是一文法,如果符号串x是从识别符号推导出来的,即有S=>*x,称x为文法G[s]的句型
若x仅由终结符组成,则为句子。

文法和语言的关系
给定文法,可以确定唯一的语言
给定语言,可以有不同的文法

文法的等价
文法的递归
文法的二义性

文法和语言的分类
设G=(VN、VT、P、S),产生式a->b
0型文法: 每个产生式,a属于(VN并VT)* 且至少含有一个非终结符,b属于(VN并VT)*
1型文法(上下文有关文法): |b|>=|a|,仅仅S->空串除外
2型文法(上下文无关文法): a是一个非终结符,b属于(VN并VT)*
3型文法(正规文法): ,每个产生式都是A->aB或A->a,其中AB都是非终结符

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java代码的文法可以用BNF(巴克斯-诺尔范式)表示,如下所示: ``` <compilationUnit> ::= [<packageDeclaration>] [<importDeclaration>] {<typeDeclaration>} <packageDeclaration> ::= "package" <qualifiedName> ";" <importDeclaration> ::= "import" ["static"] <qualifiedName> ["." "*"] ";" <typeDeclaration> ::= <classDeclaration> | <interfaceDeclaration> <classDeclaration> ::= {<modifier>} "class" <identifier> [<typeParameters>] [<superclass>] [<superinterfaces>] <classBody> <interfaceDeclaration> ::= {<modifier>} "interface" <identifier> [<typeParameters>] [<extendsInterfaces>] <interfaceBody> <modifier> ::= "public" | "protected" | "private" | "static" | "abstract" | "final" | "native" | "synchronized" | "transient" | "volatile" | "strictfp" <typeParameters> ::= "<" <typeParameterList> ">" <typeParameterList> ::= <typeParameter> {"," <typeParameter>} <typeParameter> ::= <identifier> [<extendsBound>] <extendsBound> ::= "extends" <type> [<additionalBound> {"," <additionalBound>}] <additionalBound> ::= "extends" <type> <superclass> ::= "extends" <classType> <superinterfaces> ::= "implements" <interfaceTypeList> <classBody> ::= "{" {<classBodyDeclaration>} "}" <classBodyDeclaration> ::= <classMemberDeclaration> | <staticInitializer> | <constructorDeclaration> <classMemberDeclaration> ::= <fieldDeclaration> | <methodDeclaration> | <classDeclaration> | <interfaceDeclaration> | <enumDeclaration> <staticInitializer> ::= "static" <block> <constructorDeclaration> ::= {<modifier>} <constructorDeclarator> <throws> <constructorBody> <constructorDeclarator> ::= <identifier> "(" [<formalParameterList>] ")" <formalParameterList> ::= <formalParameter> {"," <formalParameter>} <formalParameter> ::= {<annotation>} [<final>] <type> <variableDeclaratorId> <variableDeclaratorId> ::= <identifier> [<dims>] <dims> ::= "[" "]" <methodDeclaration> ::= {<modifier>} <type> <methodDeclarator> <throws> [<methodBody> | <nativeMethodBody>] <methodDeclarator> ::= <identifier> "(" [<formalParameterList>] ")" <methodBody> ::= <block> <nativeMethodBody> ::= "native" ";" <fieldDeclaration> ::= {<modifier>} <type> <variableDeclarators> ";" <variableDeclarators> ::= <variableDeclarator> {"," <variableDeclarator>} <variableDeclarator> ::= <variableDeclaratorId> ["=" <variableInitializer>] <variableInitializer> ::= <expression> | <arrayInitializer> <arrayInitializer> ::= "{" [<variableInitializer> {"," <variableInitializer>}] [","] "}" <block> ::= "{" {<blockStatement>} "}" <blockStatement> ::= <localVariableDeclarationStatement> | <statement> <localVariableDeclarationStatement> ::= <type> <variableDeclarators> ";" <statement> ::= <expressionStatement> | <declarationStatement> | <ifStatement> | <switchStatement> | <whileStatement> | <doStatement> | <forStatement> | <breakStatement> | <continueStatement> | <returnStatement> | <throwStatement> | <tryStatement> <expressionStatement> ::= [<expression>] ";" <declarationStatement> ::= <localVariableDeclarationStatement> <ifStatement> ::= "if" "(" <expression> ")" <statement> ["else" <statement>] <switchStatement> ::= "switch" "(" <expression> ")" "{" {<switchBlockStatementGroup>} "}" <switchBlockStatementGroup> ::= <switchLabels> <blockStatements> <switchLabels> ::= <switchLabel> {<switchLabel>} <switchLabel> ::= "case" <constantExpression> ":" | "default" ":" <blockStatements> ::= {<blockStatement>} <whileStatement> ::= "while" "(" <expression> ")" <statement> <doStatement> ::= "do" <statement> "while" "(" <expression> ")" ";" <forStatement> ::= "for" "(" [<forControl>] ")" <statement> <forControl> ::= <enhancedForControl> | <forInit> ";" [<expression>] ";" [<forUpdate>] <enhancedForControl> ::= <type> <variableDeclaratorId> ":" <expression> <forInit> ::= <localVariableDeclarationStatement> | [<expressionList>] <forUpdate> ::= <expressionList> <expressionList> ::= <expression> {"," <expression>} <breakStatement> ::= "break" [<identifier>] ";" <continueStatement> ::= "continue" [<identifier>] ";" <returnStatement> ::= "return" [<expression>] ";" <throwStatement> ::= "throw" <expression> ";" <tryStatement> ::= "try" <block> <catches> [<finally>] | "try" <resourceSpecification> <block> [<catches>] [<finally>] <resourceSpecification> ::= "(" {<resource>} [","] ")" <resource> ::= <variableModifiers> <classType> <variableDeclaratorId> "=" <expression> <catches> ::= {<catchClause>} <catchClause> ::= "catch" "(" <catchFormalParameter> ")" <block> <catchFormalParameter> ::= [<final>] <catchType> <variableDeclaratorId> <catchType> ::= <qualifiedName> { "|" <qualifiedName>} <finally> ::= "finally" <block> <annotation> ::= "@" <qualifiedName> [<elementValuePairs>] | "@" <qualifiedName> "(" [<elementValuePairs>] ")" <elementValuePairs> ::= <elementValuePair> {"," <elementValuePair>} <elementValuePair> ::= <identifier> "=" <elementValue> <elementValue> ::= <expression> | <annotation> | <elementValueArrayInitializer> <elementValueArrayInitializer> ::= "{" {<elementValue>} [","] "}" ``` 这个文法描述了Java代码的语法结构,可以用于编写Java编译器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值