角かっこで囲まれた用語を検証するためのコマンドラインツール

角かっこで囲まれた用語を検証するためのコマンドラインツール

LaTeXのドキュメントに角かっこが正しいかどうかを自動的に確認するためのツールを探しています。

そのようなツールを書くのはとても簡単ですが、作成する前にすでに存在しているかどうかを知りたいです。

スクリプトで使用できるようにするには、コマンドラインツールまたはシェルコードである必要があります。 GUIツールは私には役に立ちません。括弧を確認する必要があります() {} [] <>

私は文書を角かっこ式として扱います。角かっこ以外のすべての文字は重要ではありません。角かっこ項 T が 1 種類の角かっこを持つには、次の条件を満たす必要があります。

  • Tの左右の角括弧の数は同じでなければなりません。
  • Tの接頭辞には、左括弧よりも右括弧を含めることはできません。

複数の種類の括弧(括弧セットB)がある場合、Tはすべてのβ∈Bに対して上記の条件を満たす必要があり、ペアの括弧から派生したTのすべての部分文字列も上記の条件を満たす必要があります。 Tの部分文字列(t_1、...、t_s)は、β型のペア括弧で導入されると見なされます。ただし、 (β_opening, t_1, ..., t_s, β_opening) は T の部分文字列です。

ベストアンサー1

私は、チェッカーの言語によっては関係のない別の構文エラーでユーザーを悩ませることなく、括弧の正しいペアを調べるプログラムを知りません。

あなたが言ったように、このようなツールを書くのは簡単です。したがって、そのタスクを実行できる小さなスクリプトは次のとおりです。

#!/bin/sh

# If a file is given as 1st parameter, use it, else use stdin
[ "$#" -gt 0 ] && exec < "$1"

# A correct input file should result in an empty string
tr -d -c '{}[]()<>' |
sed '
    # Eliminate adjacent bracket pairs one by one
    :loop
    s/\[\]\|()\|{}\|<>//g
    t loop
' |
if grep -q .; then
    echo "ERROR: unpaired brackets!"
else
    echo "OK: all brackets are paired."
fi

sed実装が(非標準)代替演算子をサポートしていない場合は、このコマンドを4に置き換える\|ことができます。s

s/\[\]//g
s/{}//g
s/()//g
s/<>//g

上記のコマンドはtr標準ですが、一部(SysVベースのコマンド)はこれらのエスケープされていない[範囲について文句を言います。これを使用すると()エスケープを[使用できますが、POSIXでは指定されず、バックスペース文字を削除する方法があります。移植性のために、ASCIIベースのシステムでは。\tr -cd '{}()<>\[]'tr -cd '{}()<>\133\135'

おすすめ記事