Helper
digit = ['0' .. '9'];
character = ['a' .. 'z']|['A' .. 'Z'];
Token
number = digit+;
string = character+;
keywordA = 'keywordA';
keywordB = 'keywordB';
keywordC = 'keywordC';
Production
lang = options*;
option = {A} [key]:keywordA [value]:number
|{B} [key]:keywordB [value]:string
|{str} [key]:string [value]:string
Etienne Gagnon, Ph.D. http://sablecc.orgOn 2013-09-11 06:24, Tabiul Mahmood wrote:
I have below grammar
[...]
Production
lang = options*;
option = {A} [key]:keywordA [value]:number
|{B} [key]:keywordB [value]:string
|{str} [key]:string [value]:string
I am trying to write a grammar that allows a list of items to be input. For example, suppose I have tokens for either “number” or “letter”. I can see how to write a grammar for a list of those:
list =
{one} list_member |
{more} list comma list_member;
list_member =
number |
letter;
But now suppose what I need is to write a grammar that allows you to have a list that contains all numbers, or a mixture of numbers and letters, but cannot contain just letters. How do I write that grammar ... I keep getting errors. Is this just because that is not something I can parse with LALR(1)?
Thanks
Roger
.
list =
{all_numbers} number+ |
{at_least_one_letter} number* letter element*;
element =
{letter} letter |
{number} number;
list =
element+;
element =
{letter} letter |
{number} number;