リーは、南軍がステッドマン砦の戦いで敗北し、シェリダンの騎兵隊がピーターズバーグに到着したときに、グラントが3月24日に命令を出したようにリー軍の右翼側面に回る動きをしてくると予測していた。ジェームズ川より北、すなわちピーターズバーグの南18マイル (29 km) 、ストーニー・クリーク補給所より北には6,000名の騎兵が居るだけであり、また北軍の予想される動きに対応するために前線を西に伸ばして送ることのできる歩兵は、事実上約5,000名に過ぎなかった。3月29日朝、リーはジョージ・ピケット少将にこの部隊を率いてサザランド駅に行き、ディンウィディ郡のファイブフォークスを守るために移動させた。ピケットにはウィリアム・R・テリー、モンゴメリー・コース、ジョージ・H・ステュアート各准将の旅団を率いて、ピーターズバーグの西10マイル (16 km)、サウスサイド鉄道のサザランド駅に行かせ、エッパ・ハントン准将にはピケット軍を補強する移動に備え、あるいはサウスサイド鉄道とリッチモンド・アンド・デンビル鉄道の接続点であるバークビルを守る準備を命じた。さらにフィッツヒュー・リー少将には、その騎兵師団を率いてサザランド駅に向かい、ルーニー・リーとトマス・ロッサー各少将の騎兵師団と合流するよう命じてもいた。フィッツヒュー・リーは統合された騎兵軍の指揮を執るよう命じられた。リーは、ピケットが南軍の前線をファイブフォークスの東4マイル (6.4 km) の右側面から、ファイブフォークスまで延伸できるかもしれないと考えていた。3月29日の北軍の動きはリーを悩ませたので、その右側面を強化するためのさらなる動きを命じた。サミュエル・マクゴワン准将の旅団を西に行かせて、ジョンソンの前線をホワイトオーク道路に沿って延伸させた他に、ウィリアム・マクレイ准将の旅団を西に動かすことで、ホワイトオーク道路の前線を薄くした。ピケットは命令を受けていた通り3月29日夜にサザランド駅に到着した後、ウィリアム・R・テリー、モンゴメリー・コース、ジョージ・H・ステュアート各准将の3個旅団、ジョンソンの師団からマット・ランサムとウィリアム・ヘンリー・ウォレス各准将の旅団、フィッツヒュー・リー少将の騎兵1個師団、ウィリアム・ペグラム大佐の指揮する大砲6門を、3月30日にファイブフォークスまで移動させた。その後テリーの旅団とコースの旅団を南に送った。それでも、ピケットの部隊とマクゴワンの旅団の間には、ホワイトオーク道路の前線の外れで隙間が存在し続けていた。リーはマンチェスターの近くでハントンの旅団に予備隊の位置にいるよう命じ、そこでピケット軍を支援するか、北軍がサウスサイド鉄道とリッチモンド・アンド・ダンビル鉄道の結節点であるバークビルを攻撃するために移動した場合は、鉄道で移動してそこを守るように命じた。
グラントは、南軍がルイス農園で攻撃を続けられず、ホワイトオーク道路の前線まで後退したことに勇気づけられ、シェリダンに与えた任務を、鉄道の襲撃と南軍の前線を伸ばさせることよりも、主たる攻勢を掛けることに拡張することに決めた。シェリダンに宛てた手紙で「今は事態を終わらせられそうに感じている」と記した。
文法規則部には1個以上のYacc文法規則変換結果: 構成要素1 構成要素2 …        ;を記述しなければならない。ここで，変換結果とは、規則が記述する非終端記号。 構成要素とは、この規則がマッチするかを判定するために文法どおりの順に並べられる、0個以上の終端記号や非終端記号の列。 例: qa:   expr  { printf("  Ans = %Lg", $1); prompt(); }  /* 規則5  改行で計算，表示．*/同じ変換結果を生む複数の規則は次のように簡略に連続記述できる。変換結果: 構成要素11 構成要素12 …        | 構成要素21 構成要素22 …        | 構成要素31 構成要素32 …        ;「;」は省略可能。見て分かるとおり、構文規則は読み書きしやすいBNF記法になっている。規則にマッチするたびに行ないたい動作、たとえば変換結果の意味値（"$$"）をその構成要素の意味値（"$1", "$2", …）から計算すること、あるいは値を表示出力などは、C言語命令によるアクションとして「{ }」に囲って、マッチ直前に実行したい構成要素の直前に付して、あるいは規則適用時実行でよければその規則の最後の構成要素のあとに記述する。例: 上例の「{ printf("  Ans = %Lg", $1); prompt(); }」はqaがexprにマッチと判定されたとき実行される。規則は再帰的に定義できる。例で expr:  NUM                                         /* 規則6  「$$=$1;」は省略可 */    |   expr    '+'     expr    { $$ = $1 + $3; }   /* 規則9  加算．*/の規則6は、「NUMと名付けた数値トークンがきたら、それ1個単独でも式exprになる」と宣言している。そして規則9は「expr '+' exprという並びもexprである」という意味で自分expを記述しているから、再帰的な定義である。すると、規則は繰り返して適用できるから、NUMNUM '+' NUMNUM '+' NUM '+' NUM:など1個以上のNUMの加算式が、わずか2個の規則だけで表現できる。構文解析器実行時にこのうちのどれがやってきてもexprにマッチすると認識できることになる。トークン値は実際にはASCIIコードと重ならない256以上の整数であるが、Yacc文法記述者はその値を知らなくてよく、NUM, EOLといった通常大文字で記述する記号で宣言と規則で統一的に記載すればよい。トークンの意味値が伴う種類のトークンは、とりうる型は"%union"によって列挙して定義しておく。そして"%token"で"<ldval>"のように共用体のどのメンバーであるかを明示できる。アクション中で"$$"と書かれた意味値はC言語になったとき"lval.ldval"のように共用体中の要素を指すように自動変換される。このように意味値が伝わっていく。