# CompilerPractice **Repository Path**: hsxleo/compiler-practice ## Basic Information - **Project Name**: CompilerPractice - **Description**: 编译器简单实践 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-06 - **Last Updated**: 2022-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # compiler practice ## 01-lex-unsigned float 判断是否为无符号浮点数 ### 正则 ``` (0|[1-9][0-9]*)((e[+-]?|\.)[0-9]+)? ``` ### NFA ![NFA](assets/NFA.png) ### DFA ![DFA](assets/DFA.png) ### 程序流程图![程序流程图](assets/程序流程图.png) ## 02-lex-simple 简单的词法分析器 ``` 关键字 int float char void if else switch case for while do break return null true false main 运算符 + - * / = ( ) & | > < : 分隔符 { } [ ] , ; 标识符 字母数字下划线组成,必须以字母或下划线开头 字面量 Int型 Float型 Char 型 ``` ### DFA ![lex-simple DFA](assets/lex-simple-DFA.png) ## 03-syntax-simple ### 上下文无关文法 ``` <程序> => <声明><程序>|ε <声明> => <变量声明>|<函数声明> <变量声明> => <变量类型><标识符>; |<变量类型><标识符>=<算术表达式>; <函数声明> => <变量类型><标识符>(<参数列表>){<内部代码块>} <算术表达式> => <标识符><算术表达式2>|<字面量><算术表达式2> <算术表达式2> => ε |*<算术表达式> |/<算术表达式> |+<算术表达式> |-<算术表达式> <函数声明> => (<参数列表>){<内部代码块>} <参数列表> => ε|<变量类型><标识符><参数列表2> <参数列表2> => ,<参数列表> <内部代码块> => ε|<变量声明>|||<返回语句> <变量声明> => <变量类型><标识符><变量声明2> => if(<赋值表达式>){<内部代码块>} <赋值表达式> => <标识符><赋值表达式2> <赋值表达式2> => ε|=<算术表达式> => while(<赋值表达式>){<内部代码块>} <返回语句> => return<赋值表达式>; ```