美文网首页技术技术干货程序员
编译器---语法分析器(java)

编译器---语法分析器(java)

作者: 拉丁吴 | 来源:发表于2015-09-18 19:34 被阅读1485次

语法分析器的任务:

  1. 检查输入的token是否符合语法
  2. 为符合语法的语句建立抽象语法树,输出。

程序语言语法:

数学理论:上下文无关文法(CFG)
上下文无关文法是一个四元组(T,N,P,S) ,T:终结符集合,N:非终结符集合,P:产生式规则集合,S:唯一的开始符号。

以下是我定义的语法

S->P
P->fm(M)B 函数语法
M->T V M; | ε 函数传递参数
T->num | bool | string 变量类型
V->id | id_num |id_bool 变量
B->IB | WB | ε 函数体
I->i(C){E;}e{E;} 条件语句
W->w(C){E} 循环语句
C->VQV 条件比较
Q->'>'|'<'|'>='|'<='|'==' 比较符号
E->V'='K 表达式
K->GG'
G'->'+'GG' | '-'GG' | ε
G->VA_
A_->*VA_ | '/'VA_ |ε

补充注释:
{f:func,m:main,i:if,e:else,w:while,}

语法分析的方法:

  1. 自顶向下分析:
  • 递归下降分析(预测分析算法):

为每一个非终结符构造一个分析函数,用前看符号指导产生式规则的选择

  • LL分析算法:

每次都通过查表完成分析过程

  1. 自底向上分析:
  • LR分析算法:

表驱动算法

语法制导翻译:
基本思想:为每条合法的句子附加一条相应的语义动作,构建出一个抽象语法树。

我的语法分析部分的代码

相关文章

  • 编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理

    语法分析器是编译器前端的核心 语法分析器的两项主要任务,分别: 是根据词法分析器提供的记号流,为语法正确的输入构造...

  • 编译原理概述

    编译器原理 词法分析器 语法分析器 语义分析器 中间代码生成 符号表 独立机器的代码优化器 代码生成器 依赖于机器...

  • 编译器---语法分析器(java)

    语法分析器的任务: 检查输入的token是否符合语法 为符合语法的语句建立抽象语法树,输出。 程序语言语法: 数学...

  • 一个编译器最简前端的python实现

    一个编译器的前端通常包括词法分析器和语法分析器。在分析过程中,文本输入词法分析器,根据词法规则解析出词法单元。词法...

  • PHP核心理解-flex和bison入门

    一般词法分析器和语法分析器会一起使用,语法分析器会调用词法分析器来读取输入,词法分析器匹配到特定的模式后,就向语法...

  • Java 漫谈(二)

    类名     Java编译器的设计与java源代码的语法结构是相辅相成的,先有语法,再有编译器。大家都知道,jav...

  • 语法分析器 Parser

    词法分析器-->output: 记号 --> 语法分析器 -->output: AST 抽象语法树 context...

  • 编译器的工作过程

    编译器的工作过程划分为:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。 词法分析器的任务是把...

  • Elasticsearch学习篇第三章:Elasticsearc

    elasticsearch的囊括了很多东西,有分析器、插件、语法、数据组成等等部分,但是我还是很想先看看在Java...

  • 编译原理——语法分析小结(1~3)

    1、语法分析器的作用 语法分析器接收词法分析器提供的记号串,检查它们是否能由源程序语言的文法产生。 典型的...

网友评论

    本文标题:编译器---语法分析器(java)

    本文链接:https://www.haomeiwen.com/subject/npvbcttx.html