首页 > 编程语言 >Java语言语法语义分析器设计与实现

Java语言语法语义分析器设计与实现

时间:2023-07-06 23:32:39浏览次数:40  
标签:字符 Java 运算符 语义 分析器 词法 赋值


Java语言词法分析器的设计与实现

一.实验目的

1.强化对系统软件综合工程实现能力、规划能力的训练;

2.加强对词法分析原理、方法和基本实现技术的理解;

二.实验内容

用C语言(或 C++ )作为宿主语言完成:

      其中具体要求:

     1.使用DFA实现词法分析器的设计;

     2.实现对Java源程序中注释的过滤;

     3.利用两对半缓冲区从文件中逐一读取单词;

     4.词法分析结果属性字流存放在独立文件(文件名:scanner_output)中;

     5.统计源程序每行单词的个数和整个源文件单词个数;

     6.具有报告词法错误和出错位置(源程序行号和该行字符)的功

     :  附Java语言词法规则 (附件一);

    附Java语言词法分析器的属性字设计 (附件二)

 

三.实验验收与评分要求

    1.编写Java语言词法分析器的源程序并调试通过;

    2.通过测试程序的验收 (测试程序名称:Test-Lexcial);

源程序主要函数功能;主要数据结构设计。

 

附件一

JAVA语言词法规则

关键字:

abstract   boolean   break   byte   case   catch   char   class

const   continue   default   do   double   else   extends   false

final   finally   float   for   goto   if   implements   import

instanceof   int   interface   long   native   new   null   package

private   protected   public   return   short   static   super   switch

synchronized   this   throw   throws   transient   true   try   void

volatile   while

标识符:

字母或美元符号“$”或下划线开头,连接字母或美元符号“$”或下划线或数字字符的串。

常量:

整型常量: 123, 0, -456, 0123 , 0x123, -0X12,123L

实型常量: 1.23, 0.123, .123, 123., 123.0, 123e3, 123E3, 12.3F

布尔常量: true、 false

字符串常量:"This is a constant string."。

字符常量: ‘ a’ ,

转义字符描述

\ddd 1到3位8进制数据所表示的字符(ddd)

\uxxxx 1到4位16进制数所表示的字符(xxxx)

\' 单引号字符

\\ 反斜杠字符

\r 回车

\n 换行

\f 走纸换页

\t 横向跳格

\b 退格

界限符:

{ }

花括号用于定义类、方法和本地范围的代码块。它们也用于包含自动被初始化数组的值。

[ ]

方括号用于声明数组类型。同时也用于废弃数组值。

,

逗号用于分隔变量声明中连续的标识符。它也用于连接语句。

( )

圆括号用于在方法定义和调用中包含参数列表。它们也用于定义表达式中的优先级,在控制语句中包含表达式,以及包含转换类型。

.

点号用于分隔包名和类名。同时也用于把变量或者方法与引用变量分隔开。

;

分号用于终止Java语句。

 

 

 

 

 

 

 

 

 

 

  

运算符:

操作

运算符

操作

运算符

操作

运算符

加赋值

+=

大于

>

乘积赋值

*=

+

大于等于

>=

!

与赋值

&=

自增1

++

非赋值

^=

赋值

=

左移位

<<

不等于

!=

按位与

&

左移位赋值

<<=

或赋值

|=

按位取反

~

小于

<

右移位

>>

按位或

|

小于等于

<=

右移位赋值

>>=

按位异或

^

逻辑与

&

短路与

&&

条件运算符

?:

逻辑或

|

短路或

||

自减1

--

逻辑异或

^

减赋值

-=

除赋值

/=

求模

%

-

/

模赋值

%=

零填充右移位

>>>

等于

==

乘积

*

零填充右移位赋值

>>>=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

附件二


JAVA词法分析器的属性字设计

单词属性用十六进制表示:

错误的单词                                         0x100

注释                                               0x101

空格                                               0x102

关键字                                             0x103

标识符                                             0x104

布尔型                                             0x105

字符型                                             0x106

整型                                               0x107

浮点型                                             0x108

字符串                                             0x109

=  +=  -=  *=  /=  %=  &=

^=  |=  >>=  <<=  >>>=                            0x110

?:                                                0x111

||                                                0x112

&&                                                0x113

|                                                 0x114

^                                                 0x115

&                                                 0x116

==  !=                                            0x117

<  >  <=  >=                                      0x118

<<  >>  >>>                                       0x119

+  -                                              0x11a

*  /  %                                           0x11b

++  --–  !  ~                                    0x11c

[  ]  (  )  .                                     0x11d

,                                                 0x120

{}                                                0x121

;                                                 0x122


 


标签:字符,Java,运算符,语义,分析器,词法,赋值
From: https://blog.51cto.com/u_16174476/6647172

相关文章

  • Java 构造器
    Java构造器1.构造器构造器也叫构造方法,是用来完成对象的初始化。构造器的定义:构造器的定义:[访问修饰符]方法名(形参),构造器与方法不同,并没有返回值,也不能写void,访问修饰符可以是不同的,方法名要与本类的类名相同构造器的调用是由系统在创建对象的时候自动初始化对象。构......
  • JAVA_DAY02
    第二天变量类型变量的作用:存储单个数据1.成员变量类中的变量(独立于方法之外的变量)静态变量(类变量):独立于方法之外的变量,用static修饰。实例变量:独立于方法之外的变量,不过没有static修饰。只声明不赋值存在默认值,整数:0、小数:0.0、字符:false、引用:null2.局部变......
  • java 把map存入文件
    importjava.io.FileWriter;importjava.io.BufferedWriter;importjava.io.IOException;importjava.util.Map;publicclassWriteMapToFile{publicstaticvoidmain(String[]args){Map<String,String>map=//假设已经有一个Map对象try{......
  • 你不知道的JavaScript闭包知识
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址什么是闭包当一个函数能够记住并访问它创建时的词法作用域,即使该函数在其词法作用域之外执行,我们称之为闭包。闭包就像是一个背包,函数和它所需要的变量就像是放在背包里的物品。无论函数在哪里执行,它都能够打开背包并使......
  • this version of the Java Runtime only recognizes class file versions up to 55.0
    问题:  运行SpringBootdemo时报错: thisversionoftheJavaRuntimeonlyrecognizesclassfileversionsupto55.0at原因:   编译版本和运行版本不一致,具体原因是编译版本高于运行版本,SpringBootdemo中使用的是jdk17,我本地的jdk是11 解决:  调整idea中的jd......
  • ctfshow刷题(Java反序列化)
    CTFshowJava反序列化web846urldns链importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectOutput;importjava.io.ObjectOutputStream;importjava.lang.reflect.Field;importjava.net.URL;importjava.util.Base64;i......
  • java 下载多层级zip 压缩包
    1.参数 2.代码实现  3.获取单个文件流程 4. ......
  • Java基础——枚举enum
    一、什么是枚举枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。 定义一个简单的枚举:这个枚举定义了两个常量......
  • 每日汇报 第二周第五天 JAVA字符串
    今日所学:掌握创建字符串的三种方法;掌握13种操作字符串的方法;掌握indexOf()、lastLndexOf()和equals()方法的注意事项和用法;找你给我创建StringBuilder类对象的三种方法;掌握六种操作StringBuilder类对象的方法明日计划:JAVA的常用类遇到困难:JAVA开始上难度了,需要更......
  • java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener类没有找到 解决:file--properties--选择Deployment Assembly --再点击右边的Add按钮--选择JavaBuildPathEntries--点击Next按钮--选择你的MavenDependencies......