对生成语法理论有兴趣,找了几个生成语法工具,并作简要介绍。
工具
这两个都是开源项目,提供可用 Demo,也可以自己部署。RSyntxTree 提供更丰富的功能,可生成 svg图片,jsSyntaxTree 仅支持另存为 PNG,路径效果更好看。
RSyntxTree
Demo | Github | Github-WebUI版项目 | 文档
作者:Yoichiro Hasebe (長谷部 陽一郎)
RSyntaxTree 是一个用 Ruby 编写的图形语法树生成器,支持生成语法,在测试认知语法等语法图。Github 项目是命令行,Github WebUI项目可以 Docker desktop 自己部署一个和 demo 一样的工具。
jsSyntaxTree
作者:int2str(Andre Eisenbach)
简明语法
上面两张图片里单行或多行写法是等义的,简单的句子写成一行更简明,复杂的句子用多行更清晰。
1. 结构:多层嵌套的 []
[S[NP][VP[N][VP]]]
或
[S
[NP]
[VP
[N]
[VP]
]
]
这两种写法等义,工具忽略每行第一个非空格字符前的空格,把多行转成单行再绘图。
输出的语法图如下:
2. 说明
单词或短语A 单词或短语B
的形式,会将空格后的 B 作为 A 的注释 (后面的简单句子就仅写单行)
[S[NP][VP[N][VP 注释]]]
输出的语法图:
其他语法
生成语法一般用到的就是上面两个语法规则,如果我的需求复杂一点,比如我想输入空格,但语句前的空格会被忽略,语句后的空格会被转义为注释,怎么办呢?又或者我想要有换行的注释,怎么办?
空格 <>
语法图里用<>
代表空格
换行 \
语句后的\
表示换行(注意\
后至有少一个空格才换行)
带方框语句 |语句|
|语句|
绘制一个带方框的语句
列表 #\+语句\
#\\+语句\
和后续的 \语句\
构成列表,闭合的 ]
不建议和结尾的 \
在同一行,可能导致错误
我们把上述4个语法都用上,来绘制一个语法图:
[S
[NP
[Adj 注释]
[VP1 |框|<>行内空格]
]
[VP2 换行\ 换行]
[VP3 #\+列表\
\+列表项1\
]
]
换行和列表都可以用空格隔开写在一行,或分行
输出的语法图:
路径
RSyntxTree 的路径目前是一个实验性功能,即在语句后增加 +数字
(无空格)来赋予一个数字标签,在另一个语句后 +>标签
即可绘制一条由前者指向后者的箭头,例如:
[S
[NP+7]
[VP
[N]
[VP+>7]
]
]
输出的语法图:
字体样式
还可以应用字体样式,不逐一举例了
加粗 *语句*
倾斜 **语句**
加粗并倾斜 ***语句***
上划线 =语句=
下划线 -语句-
删除线 ~语句~
上标 语句_上标内容_
下标 语句__下标内容__
除了字体样式,作者也提供多种多样的字符外框,详见 文档
参考
其他工具
相关关键词
Abstract syntax tree 抽象语法树
parse tree 具体语法树、分析树、解析树
Prolog DCG 一种表达定语语法的句法结构工具