# JAVA词法分析器
## 切分TOKENS
![思维导图](./src/pic1.png)
原本是将常量这划分成了所有的类型,还特别标注了byte、boolean与String是要自己实现的
还想好了,用结构与联合实现存储不定长度内容的东西
突然想起来,这是词法分析
## flex自动生成
简单展示分类
```C
/* 关键字定义 */
ABSTRACT abstract
DEFAULT default
GOTO goto
NULL null
SWITCH switch
BOOLEAN boolean
DO do
IF if
PACKAGE package
NCHRONZED nchronzed
BREAK break
DOUBLE double
IMPLEMENTS implements
PRIVATE private
THIS this
BYTE byte
ELSE else
IMPORT import
PROTECTED protected
THROW throw
THROWS throws
CASE case
EXTENDS extends
INSTANCEOF instanceof
PUBLIC public
TRANSIENT transient
CATCH catch
INT int
RETURN return
CHAR char
FINAL final
INTERFACE interface
SHORT short
TRY try
CLASS class
FINALLY finally
LONG long
STATIC static
VOID void
CONST const
FLOAT float
NATIVE native
STRICTFP strictfp
VOLATILE volatile
CONTINUE continue
FOR for
NEW new
SUPER super
WHILE while
ASSERT assert
ENUM enum
/* 关键字定义结束 */
/* 运算符定义 */
QUES \?
COLON [:]
ASSIGNOP [=]
RELOP [>]|[<]|[>][=]|[<][=]|[=][=]|[!][=]
PLUS [+]
SUB [-]
MUL [*]
DIV [/]
AND [&][&]
OR [|][|]
/* 运算符定义结束 */
/* 分界符定义 */
ATT \@
DOT [.]
COMMA [,]
NOT [!]
SEM [;]
LP \(
RP \)
LB \[
RB \]
LC \{
RC \}
/* 分界符定义结束 */
/* 常数定义 */
STA_INT (-?[1-9][0-9]*|0)
STA_FLOAT -?(0|[1-9]+)\.[0-9]*
STA_CHAR \'[a-zA-Z]\'
STA_STRING \".*\"
STA_BOOLEAN (true|false)
/* 常数定义结束 */
/* 标识符定义 */
ID [a-zA-Z_$][a-zA-Z_$]*
/* 标识符定义结束 */
LINECOMMENT \/\/.*
COMMENT ((\/\*((\*[^\/]+)|[^\*])+\*\/)|(\/\/))
%option noyywrap
%%
{ABSTRACT} |
{DEFAULT} |
{GOTO} |
{NULL} |
{SWITCH} |
{BOOLEAN} |
{DO} |
{IF} |
{PACKAGE} |
{NCHRONZED} |
{BREAK} |
{DOUBLE} |
{IMPLEMENTS} |
{PRIVATE} |
{THIS} |
{BYTE} |
{ELSE} |
{IMPORT} |
{PROTECTED} |
{THROW} |
{THROWS} |
{CASE} |
{EXTENDS} |
{INSTANCEOF} |
{PUBLIC} |
{TRANSIENT} |
{CATCH} |
{INT} |
{RETURN} |
{CHAR} |
{FINAL} |
{INTERFACE} |
{SHORT} |
{TRY} |
{CLASS} |
{FINALLY} |
{LONG} |
{STATIC} |
{VOID} |
{CONST} |
{FLOAT} |
{NATIVE} |
{STRICTFP} |
{VOLATILE} |
{CONTINUE} |
{FOR} |
{NEW} |
{SUPER} |
{WHILE} |
{ASSERT} |
{ENUM} {
printf("< 关键字 , %10s >\n", yytext);
}
{QUES} |
{COLON} |
{ASSIGNOP} |
{RELOP} |
{PLUS} |
{SUB} |
{MUL} |
{DIV} |
{AND} |
{OR} {
printf("< 运算符 , %10s >\n", yytext);
}
{ATT} |
{COMMA} |
{DOT} |
{NOT} |
{SEM} |
{LP} |
{RP} |
{LB} |
{RB} |
{LC} |
{RC} {
printf("< 分界符 , %10s >\n", yytext);
}
{STA_INT} |
{STA_FLOAT} |
{STA_CHAR} |
{STA_STRING} |
{STA_BOOLEAN} {
printf("< 常数 , %10s >\n", yytext);
}
{ID} {
printf("< 标识符 , %10s >\n", yytext);
}
{LINECOMMENT} |
{COMMENT} |
[ \n\t] //eat the white space
```
---
注意yywrap()这个函数
具体可以参看[flex manual手册](https://westes.github.io/flex/manual/Generated-Scanner.html#Generated-Scanner)
有三种方法:
1. 在`definition`部分,添加如下内容
```
%{
#define yywrap() 1
%}```
2. 在`user code`部分,添加函数
```
int yywrap(){
return 1;
}```
3. 在`definition`部分添加`%option noyywrap`
---
## 手动实现
没有合适的资源?快使用搜索试试~ 我知道了~
java语言的词法分析器(手动与flex)。使用cmake、c语言构建。.zip
共77个文件
cmake:14个
txt:10个
c:10个
需积分: 5 1 下载量 81 浏览量
2023-10-19
19:03:43
上传
评论
收藏 143KB ZIP 举报
温馨提示
java语言的词法分析器(手动与flex)。使用cmake、c语言构建。
资源推荐
资源详情
资源评论
收起资源包目录
java语言的词法分析器(手动与flex)。使用cmake、c语言构建。.zip (77个子文件)
JavaLexer-master
src
pic1.png 30KB
LICENSE 1KB
Lexer
include
man_lex
Main.h 348B
lexical.h 1KB
head.h 151B
preprocessor.h 424B
CMakeLists.txt 117B
src
auto_lex
CMakeLists.txt 175B
auto_lex.l 7KB
auto_lex.c 59KB
man_lex
CMakeLists.txt 172B
Preprocessor.c 3KB
Lexical.c 13KB
Log.c 151B
ToolPac.c 979B
Main.c 1023B
bin
auto_lex 35KB
test.temp 2KB
test.java 2KB
man_lex 23KB
build
CMakeFiles
Makefile2 6KB
CMakeDirectoryInformation.cmake 650B
cmake.check_cache 85B
Makefile.cmake 7KB
progress.marks 2B
CMakeOutput.log 38KB
3.15.4
CompilerIdC
CMakeCCompilerId.c 20KB
a.out 16KB
CMakeDetermineCompilerABI_CXX.bin 16KB
CMakeCXXCompiler.cmake 5KB
CMakeSystem.cmake 406B
CMakeCCompiler.cmake 2KB
CMakeDetermineCompilerABI_C.bin 16KB
CompilerIdCXX
CMakeCXXCompilerId.cpp 19KB
a.out 16KB
TargetDirectories.txt 615B
cmake_install.cmake 2KB
Makefile 5KB
src
auto_lex
CMakeFiles
CMakeDirectoryInformation.cmake 650B
progress.marks 2B
auto_lex.dir
link.txt 88B
depend.internal 210B
depend.make 179B
flags.make 244B
C.includecache 279B
DependInfo.cmake 652B
cmake_clean.cmake 272B
build.make 4KB
progress.make 43B
cmake_install.cmake 1KB
Makefile 6KB
man_lex
CMakeFiles
CMakeDirectoryInformation.cmake 650B
progress.marks 2B
man_lex.dir
link.txt 223B
depend.internal 821B
depend.make 999B
flags.make 242B
C.includecache 1KB
DependInfo.cmake 1KB
cmake_clean.cmake 421B
build.make 10KB
progress.make 127B
cmake_install.cmake 1KB
Makefile 9KB
CMakeCache.txt 13KB
test.java 2KB
ss.md 0B
辅助函数
关键字格式转化
c.txt 351B
c_to_b.c 539B
a_to_b.c 754B
a.txt 351B
b.txt 2KB
a.out 16KB
case生成函数
a.c 176B
a.out 16KB
.gitignore 57B
README.md 7KB
共 77 条
- 1
资源评论
天天501
- 粉丝: 604
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功