![]() |
|||
| HSG |
|
in Goldparser-Notation
<Logo> ::= <Befehl><Logo>| <Befehl> ::= fd zahl | bk zahl | lt zahl | rt zahl | pu | pd | rp zahl Kauf <Logo> Kzu
in ply-gemäßer Form
logo : befehl logo logo : befehl : FD NUMBER befehl : BK NUMBER befehl : LT NUMBER befehl : RT NUMBER befehl : PU befehl : PD befehl : RP NUMBER '[' logo ']'
Zunächst geht es nur um die reine Syntax-Überprüfung, daher sind nur die Produktionen als doc-Strings eingefügt.
import ply.yacc as yacc
from logolex0 import tokens # logolex0.py enthält den Scanner
def p_0(p):
'logo : befehl logo'
def p_1(p):
'logo :'
def p_2(p):
'befehl : FD NUMBER'
def p_3(p):
'befehl : BK NUMBER'
def p_4(p):
'befehl : LT NUMBER'
def p_5(p):
'befehl : RT NUMBER'
def p_6(p):
'befehl : PU'
def p_7(p):
'befehl : PD'
def p_8(p):
"befehl : RP NUMBER '[' logo ']'"
def p_error(p):
print('Syntax-Fehler!')
pr = yacc.yacc()
logolex0.py, logoyacc0.py, logolex1.py
Tests
>>>
Generating LALR tables
>>> pr.parse('rp8[rp8[ \n\n lt45fd30]lt45] ]')
Syntax-Fehler!
>>> pr.parse('rp8[rp8[ \n\n lt45fd30]lt45] ')
>>> pr.parse('rp8lt[rp8[ \n\n lt45fd30]lt45] ')
Syntax-Fehler!
Syntax-Fehler!
>>> pr.parse('rp 8 [rp8[ \n\n lt45fd30]lt45] ')
>>> pr.parse('rp 8 [rp,8[ \n\n lt45fd30]lt45] ')
Unerwartetes Zeichen: ,
>>> pr.parse('rp 8 [rp8[ )\n\n lt45fd30]lt45] ')
Unerwartetes Zeichen: )
>>> pr.parse('rp 8 [rp8[ ]\n\n lt45fd30]lt45] ')
Syntax-Fehler!
>>> pr.parse('rp 8 [rp8[ \n\n lt45fd30]lt45] ')
>>>