How can I construct a parse tree from a string and a simple grammar? Semantic seems very tricky, and SMIE does not seem to produce a parse tree.
Here's an example, assuming a language that looks like this:
BLAH [ FOO "aaa"; "bbb" | BAR [ "ccc" | "ddd" ] ]
How can I simply transform that string into the following sexp, or something close?
(seq (ident "BLAH")
(choice (cons (seq (ident "FOO") (str "aaa"))
(seq (str "bbb")))
(seq (ident "BAR")
(choice (seq (str "ccc")) (seq (str "ddd"))))))
(essentially there are sequences seq
(no delimiters), grouping choices choice
([]
), strings ""
, identifiers ident
(capitals), and delimited sequences cons
(;
-delimited))
(semantic-fetch-tags)
to get the tree. Try it in C/C++ mode or Emacs Lisp mode. Here is an example of using manipulating the tags in the function srefactor--fetch-candidates-helper of my packagesrefactor
to produce a navigation tree.nil
for me, even aftersemantic-force-refresh
.