无标题文章

def andand (a, b):

if a!=0 and b!=0:

return 1

else:

return 0

def oror(a, b):

if a!=0 or b!=0:

return 1

else:

return 0





def BNF():

"""

expop  :: '^'

multop  :: '*' | '/'

addop  :: '+' | '-'

integer :: ['+' | '-'] '0'..'9'+

atom    :: PI | E | real | fn '(' expr ')' | '(' expr ')'

factor  :: atom [ expop factor ]*

term    :: factor [ multop factor ]*

expr    :: term [ addop term ]*

equation:: expr [equality expr]*

logic :: equation [logicalop equation]*

"""

global bnf

if not bnf:

point = Literal( "." )

e    = CaselessLiteral( "E" )

fnumber = Combine( Word( "+-"+nums, nums ) +

Optional( point + Optional( Word( nums ) ) ) +

Optional( e + Word( "+-"+nums, nums ) ) )

#columnName = Word(alphanums)

ident = Word(alphas+ChineseCharacters.unicodeList, ChineseCharacters.unicodeList+alphas+nums+"_$[]")

plus  = Literal( "+" )

minus = Literal( "-" )

mult  = Literal( "*" )

div  = Literal( "/" )

andand = Literal("&&")

oror = Literal("||")

is_a = Literal("==")

less_than = Literal("<")

bigger_than = Literal(">")

is_not_a = Literal("!=")

lpar  = Literal( "(" ).suppress()

rpar  = Literal( ")" ).suppress()

addop  = plus | minus

multop = mult | div

compop = is_a | is_not_a | less_than | bigger_than

logical = andand | oror

expop = Literal( "^" )

pi    = CaselessLiteral( "PI" )

logic = Forward()

atom = (Optional("-") + ( ident  | e | fnumber | pi + lpar + logic + rpar).setParseAction( pushFirst ) | ( lpar + logic.suppress() + rpar )).setParseAction(pushUMinus)

# by defining exponentiation as "atom [ ^ factor ]..." instead of "atom [ ^ atom ]...", we get right-to-left exponents, instead of left-to-righ

# that is, 2^3^2 = 2^(3^2), not (2^3)^2.

factor = Forward()

factor << atom + ZeroOrMore( ( expop + factor ).setParseAction( pushFirst ) )

term = factor + ZeroOrMore( ( multop + factor ).setParseAction( pushFirst ) )

expr = term + ZeroOrMore( ( addop + term ).setParseAction( pushFirst ) )

equation = expr + ZeroOrMore( ( compop + expr ).setParseAction(pushFirst) )

logic << equation + ZeroOrMore( ( logical + equation ).setParseAction(pushFirst) )

bnf = logic

return bnf


elif op in logicalopnList:

op2 = evaluateStack( s )

op1 = evaluateStack( s )

return logicalopn[op]( op1, op2 )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • << [访问 Wow!Ubuntu](http://wowubuntu.com)**NOTE:** This is...
    金木水火土V阅读 3,800评论 0 1
  • 后记,勉强算是个正果 老夫子:没天赋又不努力的结果 Book wanted read again What: A ...
    杨小邪yxr阅读 4,971评论 0 0
  • RL 强化学习任务通常用马尔科夫决策过程(Markov Decision Process,简称 MDP)来描述: ...
    fanlu阅读 4,318评论 0 50
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,820评论 0 9
  • 今天看到一段话 觉得很喜欢 我们都那么任性自私,又自负自卑,明明厌恶自己厌恶地要死,又想要所有人都喜欢自己。 我相...
    咖啡店日记阅读 2,361评论 0 0