擅长:python、mysql、java
<p>这使得Lisp符号可以工作xD!!在</p>
<pre><code>from pyparsing import *
def pushFirst( strg, loc, toks ):
toks[0][2], toks[0][1] = toks[0][1], toks[0][2]
def parseTerm(term):
"""
EBNF syntax elements
EXCLAM = !
HAT = ^
STAR = *
SEMI = ;
LPAR = (
RPAR = )
"""
EXCLAM,HAT,STAR = map(Literal,"!^*")
LPAR,RPAR = map(Suppress,"()")
SEMI = Suppress(";")
token = oneOf(list(alphas.upper()))
expr = Forward()
expr <<= (
EXCLAM |
Group(Word(alphas.upper()) + SEMI + ungroup(expr)) |
Group(LPAR + expr + HAT + expr + RPAR).setParseAction( pushFirst ) |
Group(LPAR + expr + STAR + expr + RPAR).setParseAction( pushFirst )
)
try:
result = expr.parseString(term)
except ParseException as pe:
print ' '*pe.loc + '^'
print pe
return result[0]
def computeTerm(term):
print term
term = (parseTerm("(((AXX;!^B;!)^C;D;!)*E;!)"))
computeTerm(term)
</code></pre>