Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.01.2022
Сообщений: 14
1

Ply.yacc.YaccError: Unable to build parser

31.03.2023, 00:46. Показов 722. Ответов 3

Author24 — интернет-сервис помощи студентам
Добрый вечер коллеги
На данный момент учусь писать собственный язык программирования, как среду разработки выбрал язык python, а программа Visual Studio Code.
В написании парсера столкнулся с ошибкой:
Unable to build parser
File "D:\.vscode\animal\parser.py", line 45, in <module>
parser = yacc.yacc(method='SLR')
ply.yacc.YaccError: Unable to build parser

Код парсера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import ply.yacc as yacc
from lexer import tokens
 
def p_expresion(p):
    '''expression: expression PLUS term
                 | expression MINUS term
       term      : term TIMES factor
                 | term DIVIDE factor'''
    if p[2] == '+':
        p[0] = p[1] + p[3]
    elif p[2] == '-':
        p[0] = p[1] - p[3]
    elif p[2] == '*':
        p[0] = p[1] * p[3]
    elif p[2] == '/':
        p[0] = p[1] / p[3]
 
def p_expresion_term(p):
    '''exprission : term'''
    p[0] = p[1]
 
'''def p_term(p):
    term : term TIMES factor
            | term DIVIDE factor
    if p[2] == '*':
        p[0] = p[1] * p[3]
    elif p[2] == '/':
        p[0] = p[1] / p[3]'''
 
def p_term_factor(p):
    'term : factor'
    p[0] = p[1]
 
def p_factor_num(p):
    'factor : NUMBER'
    p[0] = p[1]
 
def p_factor_expr(p):
    'factor : LPAREN expression RPAREN'
    p[0] = p[2]
 
def p_error(p):
    print("Syntax error in input")
 
parser = yacc.yacc(method='SLR')
 
while True:
    try:
        s = input('calc > ')
    except EOFError:
        break
    if not s:
        continue
    result = parser.parse(s)
    print(result)
Для полноты картины прикреплю файл лексера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import ply.lex as lex
 
tokens = ('NUMER', 'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'LPAREN', 'RPAREN',)
 
t_PLUS = r'\+'
t_MINUS = r'-'
t_TIMES = r'\*'
t_DIVIDE = r'/'
t_LPAREN = r'\('
t_RPAREN = r'\)'
 
def t_NUMER(t):
    r'\d+'
    t.value = int(t.value)
    return t
 
'''def t_COMMENT(t):
    r'\*'
    pass'''
 
def t_newline(t):
    r'\n+'
    t.lexer.lineno += len(t.value)
    pass
 
def t_error(t):
    print("Illegal character '%s'" % t.value[0])
    t.lexer.skip(1)
 
lexer = lex.lex()
 
data = '3+4*10+-20*2'
 
lexer.input(data)
 
while True:
    tok = lexer.token()
    if not tok:
        break
    print(tok)
Помогите пожалуйста исправить данную ошибку!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2023, 00:46
Ответы с готовыми решениями:

Добавляю @NamedQueries: ошибка Unable to build Hibernate SessionFactory
Всем привет! Intellij IDEA Ultimate 2017.3.3 Hibernate 5.2 + JPA Maven Создаю сущность...

Ошибка при build "Unable to list target platforms"
создал проект , сделал switch на android в unity 5 . пытаюсь сделать build проекта и выдает ошибку...

cmake was unable to find a build program corresponding to "ninja". cmake_make_program is not set
cmake was unable to find a build program corresponding to &quot;ninja&quot;. cmake_make_program is not set....

Unable to load file Build/Downloads.framework.js! Check that the file exists on the remote server
Загружаю webGl игру в качестве zip архива с html файлом на itch io.Но выходит такая вот ошибочка...

3
3 / 2 / 1
Регистрация: 28.03.2023
Сообщений: 5
31.03.2023, 01:21 2
Посмотри возможные ошибки в коде парсера:

Ошибка в определении правила expression. В правиле опечатка в слове expression, написано exprission.

Ошибка в определении правила expression. В правиле не указано, что делать, если оператор не является ни +, ни -, ни *, ни /.

Ошибка в определении правила term. Правило закомментировано, но используется в правиле expression.

Ошибка в определении правила term. В правиле опечатка в слове exprission, написано term : term TIMES factor exprission.

Ошибка в коде лексера:

Ошибка в определении токена NUMER. Опечатка в названии токена, должно быть NUMBER.


Не ручаюсь на все 100, но пробуй...
0
0 / 0 / 0
Регистрация: 01.01.2022
Сообщений: 14
31.03.2023, 01:43  [ТС] 3
Спасибо большое за ответ, все методы попробовал, эффекта ноль, к сожалению
0
3 / 2 / 1
Регистрация: 28.03.2023
Сообщений: 5
31.03.2023, 11:12 4
Попытка № 2)))

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import ply.yacc as yacc
from lexer import tokens
 
def p_expression(p):
    '''expression : expression PLUS term
                 | expression MINUS term'''
    if p[2] == '+':
        p[0] = p[1] + p[3]
    elif p[2] == '-':
        p[0] = p[1] - p[3]
 
def p_expression_term(p):
    'expression : term'
    p[0] = p[1]
 
def p_term(p):
    '''term : term TIMES factor
            | term DIVIDE factor'''
    if p[2] == '*':
        p[0] = p[1] * p[3]
    elif p[2] == '/':
        p[0] = p[1] / p[3]
 
def p_term_factor(p):
    'term : factor'
    p[0] = p[1]
 
def p_factor_num(p):
    'factor : NUMBER'
    p[0] = p[1]
 
def p_factor_expr(p):
    'factor : LPAREN expression RPAREN'
    p[0] = p[2]
 
def p_error(p):
    print("Syntax error in input")
 
parser = yacc.yacc()
 
while True:
    try:
        s = input('calc > ')
    except EOFError:
        break
    if not s:
        continue
    result = parser.parse(s)
    print(result)
0
31.03.2023, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2023, 11:12
Помогаю со студенческими работами здесь

CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM
Установил CMake. Здесь находится mingw D:\ProgramFiles\Qt\Tools\MinGW\bin mingw32-make.exe(путь в...

Obj в PLY
Есть файл в формате obj + текстуры пытаюсь конвертировать в MeshLab в формат PLY, выдает ошибку, на...

Win 8.1 build 9600 распознаётся как Windows 8 build 9200
Проблема с версией. Win 8.1 build 9600 распознаётся как Windows 8 build 9200 . Проверил ток что ....

Почему в Eclipse неактивно действие Build Project и Build All?
Доброго времени суток) У меня вопрос такой: почему в Eclipse неактивно действие Build Project и...

Принудительная очистка кэша браузера после сборки проекта (npm run build | yarn build)
Добрый день, коллеги. После сборки проекта у клиента всё еще остаётся &quot;старый&quot; веб-интерфейс до...

Как из build. grade запустить ndk-build?
как утилиту ndk-build запустить через Gradle а не через консоль? можете привести полный скрипт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru