# 类Pascal语言的语法分析器
## 功能
使用Python实现的类Pascal语言的词法分析和语法分析器。
语法分析实现的功能有:
- 利用文法推导式构造LR(1)分析表
- 使用LR(1)分析表对输入的Token串进行语法分析,构建语法树
- 树形输出语法树
- 词法语法检错,显示出错代码上下文和出错原因
## 程序运行
```
python3 main.py src_path
```
对输入路径为`src_path`的源文件进行语法分析
```
python3 main.py make-parse-table
```
根据 parser/bnf.txt 所定义的语言BNF范式构造语言的LR(1)语法分析表,并将分析表以文件的形式保存到项目目录的`data`文件夹中;
## 运行截图
下面为语法分析器对以下源程序进行语法分析的结果
```pascal
let
const ten = 10;
func power(a: Integer, n: Integer): Integer is
if n == 0
then 1
else a * power(a ,n-1)
in
power(ten)
```
程序语法树构造结果:
![Alt text](./doc/assets/simple_parse_tree.png)
源文件存在词法错误时的输出:
![Alt text](./doc/assets/1.png)
源文件存在语法错误时的输出:
![Alt text](./doc/assets/2.png)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
TheBloodthirster.zip (42个子文件)
TheBloodthirster
doc
assets
simple_parse_tree.png 297KB
1.png 28KB
2.png 26KB
demo_src
text1.txt 157B
declare.txt 270B
text2.txt 854B
main.py 2KB
data
LR1_parse_table.dat 170KB
LICENSE 1KB
.git
index 2KB
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
HEAD 32B
objects
pack
pack-43f724933b619039188664c663e63c007eb197a6.pack 370KB
pack-43f724933b619039188664c663e63c007eb197a6.idx 2KB
info
description 73B
packed-refs 114B
info
exclude 240B
logs
HEAD 203B
refs
heads
master 203B
remotes
origin
HEAD 203B
hooks
post-update.sample 189B
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
config 326B
scanner
scanner.py 10KB
parser
__init__.py 1B
symbol.py 753B
lr1.py 7KB
tools.py 8KB
bnf.txt 2KB
README.md 1KB
共 42 条
- 1
资源评论
fengbeely
- 粉丝: 57
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功