一个完整的乔姆斯基文法分析工具,支持文法类型判定、合法性验证和统计信息。
文法类型判定: 自动判断文法所属的乔姆斯基类型 (0-3型)
文法合法性验证: 检测文法中的错误
文法统计信息: 提供文法的详细统计数据
/workspace/
├── CMakeLists.txt # CMake构建配置
├── examples/ # 示例文法文件
│ └── test.bnf # 简单的BNF文法示例
├── include/ # 头文件
│ ├── grammar.h # 文法类定义
│ ├── grammar_parser.h # 文法解析器
│ ├── chomsky_classifier.h # 乔姆斯基分类器
│ └── validator.h # 文法验证器
├── src/ # 源文件
│ ├── main.cpp # 主程序,命令行接口
│ ├── grammar.cpp # 文法类实现
│ ├── grammar_parser.cpp # 文法解析器实现
│ ├── validator.cpp # 文法验证器实现
│ └── chomsky_classifier.cpp # 乔姆斯基分类器实现
└── 测试文件/ # 测试用例
├── test_grammar1.bnf # 基础2型文法测试
├── test_type3_right.bnf # 3型右线性文法测试
├── test_type3_left.bnf # 3型左线性文法测试
├── test_type1.bnf # 1型文法测试
├── test_error.bnf # 有错误的文法测试
└── test_final.bnf # 综合表达式文法测试
# 文法类型判定
./grammar_analyzer input.txt --check-type
# 文法合法性验证
./grammar_analyzer input.txt --validate
# 文法统计信息
./grammar_analyzer input.txt --stats
cd /workspace
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
或者直接使用g++编译:
g++ -std=c++17 -I./include -o grammar_analyzer \
src/main.cpp src/grammar_parser.cpp src/grammar.cpp src/validator.cpp src/chomsky_classifier.cpp
文法文件为纯文本文件(UTF-8 编码),格式如下:
# 非终结符集合(空格分隔)
N: S A B C
# 终结符集合(空格分隔)
T: a b c
# 产生式(每行一条,| 分隔同一左部的多个右部,ε 表示空串)
P:
S -> A B C
A -> a A | a
B -> b
C -> c C | ε
# 开始符号
START: S
项目包含完整的测试用例,覆盖:
MIT License