コンパイラのクラスで、講師は、これから実装する言語の文法ではパーサーで先読みが必要になると教えてくれました。flex のようなツールを使用すると、 で簡単に実行できますfoo/x
。
私は現在、Python がプロジェクトに適しているかどうかを確認するために、PLY ライブラリを使用して Python でサンプル プログラムを実行しようとしています。FORTRAN の do ループの単純なバージョンを実装しようとしています。
-- Spaces are ignored in FORTRAN
DO 5 I=1,10 -- Loop
DO 5 I=1.10 -- Assignment (DO5I = 1.10)
現在、私の考えは、DO
キーワードに一致し、残りの入力がループに一致するかどうかを確認することです。存在する場合は、DO
トークンを返します。それ以外の場合は、入力を「巻き戻して」識別子ルールに進みたいと思います。何かのようなもの:
def t_do(t):
'do'
if re.match(do_loop_regex, t.lexer.lexdata[t.lexer.lexpos:]):
return t
else:
t.rewind() # this is what I need to figure out
return t_identifier(t)
def t_identifier(t):
'[A-Z_][A-Z0-9_]*'
return t