web-dev-qa-db-ja.com

構文パターンの辞書?

構文解析時に使用される明示的なパターンの用語を提供する辞書を見つけるのに苦労しています。ネストに適用される10以上の異なるマークダウン解析ルール間の微妙な違いと、類似したシンボルを持っているように見える異なるマークダウン構文が完全に異なる解析ルールを持っている方法について書き込もうとしています。

私が達成しようとしているのは、名前が何なのか疑問に思うことのない構文パターンのユビキタスな構文解析規則の意味や用語を完全に明確にすることです。これらのパターンが何と呼ばれているのか、あるいは明示的な用語が含まれているのかさえわからないことに気づきました。どこかで役立つレキシコンを見つけられることを期待していましたが、明確で特定の言語に固有ではないものを見つけることができませんでした。つまり、私は「普遍的に明示的な」何かを探していました。

以下は、これらの解析パターンおよび/または解析ルールを呼び出す演算子を明示的に説明する明確な用語を見つけようとしている、よく知られたパターンの例です。私は彼らに意味を伝えることを望んでいるが「適切な」用語がわからない「作り上げた」名前を与えるように最善を尽くしました。

これは衒学的な運動のように思えるかもしれませんが、なぜこれが重要なのかわからないが、答えも知っている誰かがそこにいることを願っています!

  1. グループ化演算子-これらには2つの異なるタイプしかないと思います:グループの開始と終了を示す明示的な記号を持つもの(つまり、算術式の括弧)と同じ記号を使用するもの(つまり:文字列補間での単一引用符または二重引用符)
    • これら2つのタイプのグループ化演算子を区別する用語はありますか?
    • 「グループ化」以外に、シンボルの構文スコープがそれらの演算子に含まれるものとして明示的に定義されていることを明示的に意味する用語はありますか?
  2. Line-Scoped Operators-これらは、行の先頭に表示される1つ以上のシンボルであり、そのスコープは行全体、つまりEOLシンボルが何であってもすべてのものであることを意味します。 (つまり、-は箇条書きを示し、#はCommonMarkのレベル1の見出しを示します。)
    • シンボルを行の先頭に固定する必要があり、スコープが行全体である、この暗黙の動作を説明する用語はありますか?
  3. 隣接演算子-演算子記号は、それに続く「Word」などの任意のスコープ、または具体的には次の空白文字までに適用されます。私にとって、これは説明するのが最も難しいパターンです。明示的に「隣接する」もののルールは、任意の数の区切り文字を使用でき、区切り記号をエスケープするさまざまな手段があるなどです。これの良い例は、正規表現の境界またはインライン演算子です。
    • スコープが任意の記号で終わるこの演算子のパターンを最もよく表す用語はどれですか?
    • また、これらの演算子の範囲を説明する用語はありますか?区切られたデータファイルがこれらの「フィールド」を呼び出す方法など、さまざまな構文には特定の用語があるため、これはトリッキーですが、特定の正規表現演算子のクラスのスコープを何と呼ぶか​​わかりません
  4. ブロック演算子-グループ化演算子と同じですが、EOLシンボルを無視します。 (つまり:```(GFMのコードフェンスの場合)_
    • 「ブロック構文」は、HTMLタグのように開始と終了を区別することを除いて、おそらく明示的に十分だと思います。
  5. エンティティ-&copyが©としてレンダリングされる方法など、特定のユニコード文字に変換されるシンボリックワード
    • 私はマークダウン、特にGFMで適用されるように「エンティティ」という用語を使用しますが、GFMの「エンティティ」の外では、用語が一般的になるので、この種のパターンを普遍的に明確に意味する用語があると期待しています。

この質問はソフトウェアエンジニアリングよりも語彙セマンティクスに関するものかもしれませんが、プログラミングで明示的である(または少なくとも特定のコンテキストで「明示的」を構成するものを完全に理解する)ので、プログラマーは完全な混乱と悲惨で激しい失敗を回避する方法です。これが、実際にこれらのパターンのいくつかが実際に何と名付けられているかを知るのに十分な語彙忍者エルディテを実際に見つけるかもしれない場所だと考えました。

1
Darf Nader
  1. "foo" [foo] (a + b) <a>...</a> { stuff; } /* comments and stuff */-これらはグループとしてよく知られている名前を持たない傾向があります。ただし、それぞれに独自のよく知られた名前があり、形容詞としてよく使用されます(引用符付きのfoo、括弧で囲まれたfoo、タグ付きのfooなど)。
  2. # // ---これらは単純に単一行のコメントであるか、まれに行修飾子です。トークンは行の先頭にある必要はなく、これらは通常、#1(newline | EOFが終了マーカー)とは区別して扱われません。
  3. ! + and ++ async-これらはprefixsuffix、または中置演算子は、それぞれ非終端記号の前、後、または間にあるかどうかによって異なります。これらは実際の文法で最も一般的です。なぜなら、すべてがそのような単純な形式に還元できるからです( https://en.wikipedia.org/wiki/Chomsky_hierarchy 要素言語構造の場合)。
  4. { stuff; } <a> ... </a> @"..."-単な​​るブロックです。実際には、改行は含まれている非終端記号で許可されるかどうかに関係なく使用できる別の文字であるため、これらは#1と区別されない傾向があります。
  5. &copy \n 0x64 :emoji:-一般にエスケープシーケンスまたは時々エンコードされた文字(またはエンコードされたintまたはエンコードされたもの)と呼ばれます。

そして、あなたが言及しなかった他の非常に一般的なものは、somethingdelimitedで、a, b, cこれは「カンマ区切り」です。

聴衆に応じて、これらは重要な場合と重要でない場合があります。 #3は実際の文法について話すときに最も重要です。エスケープシーケンスと区切りシーケンスは、ほとんどすべての言語で表示されます。引用されたもの、括弧で囲まれたもの、およびブロックは非常に一般的ですが、コンテキストではそれと呼ばれない場合があります。正しい用語は、情報を伝えようとしている相手によって異なります。

2
Telastyn