Я пытаюсь написать грамматику, чтобы я мог разобрать указанный c тип входного файла. Я начал с самой базовой грамматики c, но guile
почти растопил мой компьютер при попытке сопоставить шаблон с этой грамматикой.
Мне интересно, есть ли что-то неоднозначное в моей грамматике? Вот пример ввода, который я пытаюсь проанализировать:
input.txt
[HELLO]
var = 123
[]
А вот мой текущий скрипт:
(use-modules (ice-9 peg))
(use-modules (ice-9 textual-ports))
(define *input*
(call-with-input-file
"test.txt" get-string-all))
(define-peg-string-patterns
"block <-- block_header param block_closer
block_header <-- LB text RB SP
block_closer <-- LB RB SP
param <-- text SP EQ param_v SP
param_v <-- NUM
text <-- [a-zA-Z]+
NUM <-- [0-9]+
EQ < '='
LB < '['
RB < ']'
SP < [ \t\n]*")
(peg:tree (match-pattern block *input*))
Суть в том, что файл состоит из blocks
, который содержит переменные. (Следующий шаг - добавление вложенных блоков в эту грамматику.)
Что-то не так с этой грамматикой?