問題タブ [grammar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - Objective-Cで予約されているキーワード?
昨日のCocoaHeadsÖresund会議で、peylowは素晴らしいObjCクイズを作成しました。競争は激しく、最後の質問が評価されるときに3人が同じスコアを残されました:Objective-CはCにいくつの予約キーワードを追加しますか?
いくつかの活発な議論が続いた。などはすべてキーワードではなくプリプロセッサディレクティブであること@interface
に全員が同意しましたが、次のようなものはどうでしょうか。キーワードかもしれませんが、予約キーワードではありません。たとえば、以下はエラーや警告なしでコンパイルされます。@implementation
in
ObjCはCに予約キーワードを追加せず、誰かが一見十分に稼いだ本を獲得したと結論付けました。
しかし、今日、私は次のようなことを試して、コンパイラに対してより体系的な悪用を試みました。
これは正常にコンパイルされ、同じコードがandの代わりにselfを置き換えて機能BOOL, bycopy, inout, oneway, byref, SEL,
しIMP
ます。
変数名として使用id
すると、最初と最後の行がコンパイルされますが、2番目の行はコンパイルされません。同じことが、、Protocol
およびにも当てはまりClass
ます。
を使用するsuper
と、最初の行はコンパイルされますが、2番目と3番目はコンパイルされません。
、、、YES
およびを使用するNO
と、3行すべてがコンパイルに失敗します。これは、NULL
おそらく、、、、およびとして定義されているためです。true
false
nil
これの多くはgccが混乱しているように見えますが、Objective-Cで予約されているキーワードとそうでないキーワードが反映されているかどうかはわかりません。たとえば、self
intの名前として使用しても問題ないのに、なぜ問題がないのsuper
でしょうか。
最初の割り当てが常に機能するという事実(YES、NO、およびNULLを除く)は、候補のいずれもCにない技術的に予約されたキーワードではないという考えをサポートしているようです。
誰かがこの厄介な問題の権威ある説明を私たちに教えてもらえますか?
何人かの人々の名誉が危機に瀕しています。
編集:ニコライ・ルーエが指摘したように、先に進むには「キーワード」の明確な定義が必要です。ニコはウィキペディアの記事を引用して、キーワードは「特定の意味を持つ単語または識別子」であると述べています。
同じ記事からこの定義を使用するのは合理的だと思います。
CやC++などの同様の環境などの多くの言語では、キーワードは構文形式を識別する予約語です。if、then、elseなどの制御フロー構造で使用される単語はキーワードです。これらの言語では、キーワードを変数または関数の名前として使用することもできません。
さらに、記事が述べているように:
通常、プログラマーが変数名または関数名にキーワードを使用しようとすると、コンパイルエラーがトリガーされます。
この意味で、言語の正式な仕様で事前定義されており、ユーザー定義名として使用できない予約キーワードはありますか?
python - Pyparsing でのキーワード マッチング: 貪欲でないトークンの丸呑み
パイソンニスタ:
Pyparsing を使用して次の文字列を解析するとします。
was はABC_123
識別子です。SPEED_X
はパラメータで、123
は値です。Pyparsing を使用して次の BNF を考えました。
途中からアンダースコアを削除すると(そしてEntry
それに応じて定義を調整すると)、正しく解析されます。
_
このパーサーを少し怠惰にして、キーワードに一致するまで待つにはどうすればよいですか (文字列全体を識別子として丸呑みし、存在しない を待つのではなく.
ありがとうございました。
[注: これは私の質問を完全に書き直したものです。私は本当の問題が何であるかを理解していませんでした]
ruby - RubyでCLIを実装するのに役立つライブラリ?
RubyでCLIタイプのアプリケーションを実装しようとしています。
CLIは、定義したい文法を使用してコマンドを受け入れる必要があります。文法(RParsec)を実装および解析する方法についていくつかの手がかりを見つけましたが、それをコードに接続してコマンドを実際に実行する方法がわかりません。
コマンドは次のようになります(非常に大まかな考えです。大学の語学コース以外の文法の経験があります)。
"プロパティfooが'abc'に等しい50個のウィジェットを作成します""プロパティfooが'abc'に等しいすべてのウィジェットを更新して、プロパティbazが'xyz'になるようにします"
誰かが私を正しい方向に向けてくれたら幸いです。ありがとう。
grammar - 文法構文と言語学
私は本当に機械で翻訳でき、厳密にルールベース(統計的なものではない)の方法で英語の文構造の説明が必要です。文脈自由文法である必要はありませんが、それが望ましいでしょう(それを完全に説明することはできません)。私が見つけた最高のものはBNF用でしたが、それは本当に基本的でした. あいまいなところを除いて、例外のないものが必要です。リンクはありますか?
php - この文法はLR(1)ではありませんか?
私はPHP用のパーサジェネレータに取り組んでいます。現在、正規LR(1)パーサーを実装しようとしていますが、次の文法でreduce-reduce競合が出力されます。この文法はLR(1)ではありませんか?または、アルゴリズムを再確認する必要がありますか?
バイソン(のような)表記の文法:
編集:
計算されたテーブル:
と競合:
computer-science - 計算モデルについて学ぶための良いリソースはありますか?
好奇心から、私が使用しているシステムがどの計算モデルと機能的に同等であるかを特定し、その同等性を証明しようとしています。この問題に時間を費やすほど、システムがチューリングと同等ではないことが疑われます。チューリング マシンと再帰的に列挙可能な言語についてはよく理解していますが、機能の少ないオートマトン (プッシュダウン オートマトンなど) についてはよく知らないので、どのように進めればよいかわかりません。
まず、さまざまな計算モデルについて学習するための優れたリソースを推奨できる人はいますか? 文法、言語、オートマトンに興味があり、それらすべての同等性と相違点を証明する方法に興味があります。理想的には、リソースは各モデルのすべての要素を詳細に分析し、それらを比較します。
第二に、システムをこれらの計算モデルのいずれかに当てはめようとするときに使用すべき一般的なアプローチまたはフレームワークはありますか?
parsing - LALR(1)関数のパラメーターの空のリスト
単純なLALR(1)文法がありますが、問題が発生しています。
ドットはルールの終わりを示し、角かっこの間の端子には結合性が割り当てられています。ASSIGNは右結合、COMMAは左結合です。
しかし、レモンは、「empty_stmt_list::=」というルールを減らすことはできないと言っています。開始シンボルに接続されていないためです。きっと:-)
「invoke」の解析の競合もあります。empty_stmt_listが実際にステートメントの空のリストである場合、RPARENとCOMMAのどちらかを決定することはできません。
私が達成しようとしているのは、(void)パラメーターを持たない関数呼び出しを解析できることです。
他のすべては期待どおりに機能します。
ありがとう
編集:元の投稿を編集し、削除された文法全体を投稿しました。
parsing - Bisonにreduce-reduce競合も期待していることをどのように伝えることができますか?
私のC#風のおもちゃの文法には、最初のreduce-reduceの競合があります。私は私をとても誇りに思っています。
しかし、それは私には大丈夫のようです(私はその機会にGLRパーサーに切り替えました)。問題は、%expect
ディレクティブがシフト/リデュースの競合についてバイソンをシャットダウンできることは知っていますが、リデュース/リデュースの競合に相当するものが見つからないことです。では、3つのシフト/リデュースと2つのリデュース/リデュースについて沈黙させるには何を使用すればよいですか?