【问题标题】:Issues running PLY Python运行 PLY Python 的问题
【发布时间】:2022-11-12 08:18:37
【问题描述】:

我在 python 中运行 PLY 时遇到问题。我已经通过在线下载安装文件并从命令提示符运行它来安装 PLY。安装成功。但是,我不断收到“没有名为 ply 的模块”的错误。我把代码放在下面:

VS_Code 不断在 import 语句的 ply 和 ply.yacc 部分下放置波浪线。

from ply import lex
import ply.yacc as yacc

tokens = (
   
    'MINUS',
    'TIMES',
    'DIV',
    'LPAREN',
    'RPAREN',
    'NUMBER',
)

t_ignore = ' \t'
t_MINUS   = r'-'
t_TIMES   = r'\*'
t_DIV     = r'/'
t_LPAREN  = r'\('
t_RPAREN  = r'\)'

def t_NUMBER( t ) :
    r'[0-9]+'
    t.value = int( t.value )
    return t

def t_newline( t ):
  r'\n+'
  t.lexer.lineno += len( t.value )

def t_error( t ):
  print("Invalid Token:",t.value[0])
  t.lexer.skip( 1 )

lexer = lex.lex()

precedence = (
    ( 'nonassoc', 'UMINUS' ),
    ( 'left', 'TIMES', 'DIV' ),
    ( 'left', 'MINUS' )
)


def p_sub( p ) :
    'expr : expr MINUS expr'
    p[0] = p[1] - p[3]

def p_expr2uminus( p ) :
    'expr : MINUS expr %prec UMINUS'
    p[0] = - p[2]

def p_mult_div( p ) :
    '''expr : expr TIMES expr
            | expr DIV expr'''

    if p[2] == '*' :
        p[0] = p[1] * p[3]
    else :
        if p[3] == 0 :
            print("Can't divide by 0")
            raise ZeroDivisionError('integer division by 0')
        p[0] = p[1] / p[3]

def p_expr2NUM( p ) :
    'expr : NUMBER'
    p[0] = p[1]

def p_parens( p ) :
    'expr : LPAREN expr RPAREN'
    p[0] = p[2]

def p_error( p ):
    print("Syntax error in input!")

parser = yacc.yacc()

res = parser.parse("5-8*6-2") # the input  
##res = parser.parse("3+5*8/2") # the input  
print(res)

【问题讨论】:

  • 什么“安装文件”?您可以通过从the github repository 下载两个 Python 文件并将它们放在与解析器相同的目录中来“安装”Ply。
  • @rici:他们可能正在引用pypi.org/project/ply 的安装
  • @sean:可能是,但是“我下载了安装文件并运行它”的描述似乎与使用 pypi 不一致,这通常涉及使用pip,不是吗?这就是我要求澄清的原因。

标签: python ply


【解决方案1】:

我很可能发生的事情是您在拥有语言源文件的文件夹中没有“ply”文件夹,并且您没有将 ply 的位置添加到您的 sys.path 中。这将导致您用波浪线指示的确切行为。我怀疑您还会在“问题”窗口中看到“无法解决导入“层”的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多