コンパイラのクラスで、講師は、これから実装する言語の文法ではパーサーで先読みが必要になると教えてくれました。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