5

この仕様のサブセットに準拠しようとするフロント エンドを実装しようとしています。

<LINE-START>と を除いて、多くのことがリファレンスで明確に定義されているようですが、<LINE-END>それでもよく使用されます。

ここに引用があります:「指定を容易にするために、論理行の開始の直前のポイントと論理行の最後の行ターミネーターの直前のポイントを明示的に参照できると便利です。これは、<LINE-START>および<LINE-END>VBA 文法の終端記号として。A<LINE-START>は各論理行の直前に定義され、aは各論理行の最後で<LINE-END>を置き換えるものとして定義されます。"<line-terminator>

ここではいくつかの例を示します。

line-terminator = (%x000D %x000A) / %x000D / %x000A / %x2028 / %x2029
line-continuation = *WSC underscore *WSC line-terminator
WS = 1*(WSC / line-continuation)

EOL = [WS] LINE-END
logical-line = LINE-START *extended-line LINE-END

if-statement = LINE-START “If” boolean-expression “Then” EOL
               statement-block
               *[else-if-block]
               [else-block]
               LINE-START ((“End” “If”) / “EndIf”)

else-if-block = LINE-START “ElseIf” boolean-expression “Then” EOL
                LINE-START statement-block

else-block = LINE-START “Else” statement-block

<LINE-START>andを定義する場所と方法を知っている人はいます<LINE-END>か?

4

2 に答える 2

1

ドキュメントで説明されている複数の言語を考えると、これらが (ドキュメントの他の場所で提案されているように) トークンである場合、行頭と行末の定義は表 3.2.2 論理行文法の一部であると予想されます。あなたが言うように、それらはあまり明確に定義されていません。

別の可能性があります。これらの用語の使用方法は、BOF/EOF との類推を示唆しています。これは、使用されているトークン システムとは独立した状態であることを示唆しています。この場合、適切な条件が満たされているときにパーサーの一部としてこれらを定義する必要があります。定義は、ファイル内の位置など、いくつかの要因によって異なります。前のトークン、現在のトークン、場合によっては次のトークン。(たとえば、開始行は、終了行の状態から進んだ後にドキュメントを配置する必要がある状態ですが、EOF の場合はそうではありません)。これらの規則は、与えられた (断片的な) 定義と適切な仮定から導出する必要があります。

これは完全な答えではありませんが、この点に関する仕様の曖昧さと、これらのトークンの複数の使用法を考えると?/状態? より完全な答えを与える方法を理解するのは難しいと思います。HTH。

于 2012-08-08T04:44:14.417 に答える
0

VBAでは、そのコマンドを書くことができます

Dim from
Dim to
FakeTest from, to

LINE-START は、行の開始を指しますが、行の最初の単語の前であり、開始行そのものではありません。

また、LINE-END は行末を指しますが、行末の前に空白と集計を追加できるため、そうではありません。

VBA のスペースは、特にメソッドを呼び出す場合に、2 つの単語を区別するための有効な区切り記号として認識されることに注意してください。

CallMethod param1, param2, _
           param3

その例でわかるように、VBA は、結果がある場合に表現された括弧を挿入することを許可しません。

result = CallAMethod(param1, param2)

また、ステートメントを区切るためにセミコロンやコロンを追加する必要はありません。

私は言います:空白と集計は言語構文の一部です。これは、他のプログラミング言語には当てはまりません。

于 2012-08-11T20:15:01.493 に答える