翻译Python';将形式语言转换为轨道图
我目前正在尝试将Python的形式语法()翻译成轨道图。 我们正在使用的网站对大部分内容都很有帮助,我们已经手动更改了许多内容,以确定创建铁路图的正确符号,但仍有50多条线路不正确,我们很难修复,因为我们是全新的。有没有比手工改变更简单的方法 请注意,该网站使用EBNF翻译Python';将形式语言转换为轨道图,python,diagram,bnf,ebnf,Python,Diagram,Bnf,Ebnf,我目前正在尝试将Python的形式语法()翻译成轨道图。 我们正在使用的网站对大部分内容都很有帮助,我们已经手动更改了许多内容,以确定创建铁路图的正确符号,但仍有50多条线路不正确,我们很难修复,因为我们是全新的。有没有比手工改变更简单的方法 请注意,该网站使用EBNF 感谢您的时间,编写一个解析语法的解析器,然后从解析树转换为所需的符号 转换本身相当简单: 将“#”注释介绍人替换为“/” 将“:”标记替换为“:=” 将“[”标记替换为“(” 将“]”标记替换为“)?” 一个合适的元语法,在
感谢您的时间,编写一个解析语法的解析器,然后从解析树转换为所需的符号 转换本身相当简单:
- 将“#”注释介绍人替换为“/”
- 将“:”标记替换为“:=”
- 将“[”标记替换为“(”
- 将“]”标记替换为“)?”
语法.XQuery
。接下来,将python语法放入python.grammar
,将这个XQuery程序放入transform.XQuery
:
import module namespace p="grammar" at "grammar.xquery";
declare option saxon:output "method=text";
declare variable $input as xs:string external;
for $token in p:parse-Grammar(unparsed-text($input))//text()
return
if (starts-with(normalize-space($token), "#")) then
replace($token, "((^|
)[\s])*#", "$1//")
else
switch ($token)
case ":" return "::="
case "[" return "("
case "]" return ")?"
default return $token
然后使用来运行它:
java net.sf.saxon.Query transform.xquery input=python.grammar > python.ebnf
结果就是你想要的
当然,你也可以使用你最喜欢的文本编辑器来仔细地做同样的事情。做对了就更有趣了
import module namespace p="grammar" at "grammar.xquery";
declare option saxon:output "method=text";
declare variable $input as xs:string external;
for $token in p:parse-Grammar(unparsed-text($input))//text()
return
if (starts-with(normalize-space($token), "#")) then
replace($token, "((^|
)[\s])*#", "$1//")
else
switch ($token)
case ":" return "::="
case "[" return "("
case "]" return ")?"
default return $token
java net.sf.saxon.Query transform.xquery input=python.grammar > python.ebnf