一个完整的乔姆斯基文法分析工具,支持文法类型判定、合法性验证和统计信息。
文法类型判定: 自动判断文法所属的乔姆斯基类型 (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