Posted to tcl by abc at Mon Oct 22 10:00:56 GMT 2018view raw
- #!/usr/bin/tclsh
- #
- # abc @irc.freenode.net
- #
- # aycock parser following example in
- # http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/grammar_aycock/aycock.html
- #
- # modified to output instantiated syntax tree
- #
- package require grammar::aycock
- ## modified grammar, symbolic syntax tree output
- set p [grammar::aycock::parser {
- start ::= E {}
- E ::= E + T {list [lindex $_ 0] [lindex $_ 2] ADD}
- E ::= T {}
- T ::= T * F {list [lindex $_ 0] [lindex $_ 2] MUL}
- T ::= F {}
- F ::= NUMBER {}
- F ::= ( E ) {lindex $_ 1}
- }]
- puts [$p parse {( NUMBER + NUMBER ) * ( NUMBER + NUMBER ) } \
- {{} 2 {} 3 {} {} {} 7 {} 1 {}}]
- $p destroy