Pythonは多機能なプログラミング言語で、その一つとしてパーサージェネレーターがあります。特に、Python Lex-Yacc(PLY)は、伝統的なパーサージェネレーターであるlexとyaccのPython実装で、その使用が広まっています。
PLYは、yaccと同じLALR(1)パーシングアルゴリズムを使用し、その主要な機能のほとんどを持っています。また、現代のPythonのすべてのバージョンと互換性があります。
以下に、PythonとPLYを使用して独自の言語を作成する例を示します。
# ==============
# 言葉を決める(トークンを定義する)
# ==============
tokens = (
'HELP',
)
def t_HELP (t):
r'ヘルプ|help'
return t
# ==============
# やることを決める(ソースをトークンに分割)
# ==============
import ply.lex as lex
lexer = lex.lex ()
def p_help (t):
'expression : HELP'
print(
\"\"\" 「退出」と入力すれば終了します
「入力 <文字列>」と入力すると文字列を記憶します、10個まで記憶できます
「辞書」と入力すると記憶した文字列を表示します
「出力 <数字>」と入力すると記憶した文字列を表示します
\"\"\"
)
# ==============
# どう実行するかを決める(パーサーが構文解析をする)
# ==============
import ply.yacc as yacc
parser = yacc.yacc ()
while True:
try:
s = input('何か入力して「Enter」を押してください→ ')
except EOFError:
break
if not s: # ignore blank input
continue
parser.parse (s)
このコードは、ユーザーが「ヘルプ」または「help」を入力すると、特定のメッセージを表示する簡単な言語を作成します。
以上のように、PythonとPLYを使用すると、独自の言語を作成することが可能です。これは、Pythonの強力な機能の一つであり、さまざまなアプリケーションで利用できます。