%%% -*- mode: erlang -*- ------------------------------------------------------------------ %%% File: erlydtl_parser.erl %%% @author Andreas Stenius %%% @copyright 2013 Andreas Stenius %%% @doc Sample extension grammar %%% @reference See http://erlydtl.googlecode.com for more information %%% @end %%% %%% The MIT License %%% %%% Copyright (c) 2013 Andreas Stenius %%% %%% Permission is hereby granted, free of charge, to any person obtaining a copy %%% of this software and associated documentation files (the "Software"), to deal %%% in the Software without restriction, including without limitation the rights %%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell %%% copies of the Software, and to permit persons to whom the Software is %%% furnished to do so, subject to the following conditions: %%% %%% The above copyright notice and this permission notice shall be included in %%% all copies or substantial portions of the Software. %%% %%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR %%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, %%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE %%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER %%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, %%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN %%% THE SOFTWARE. %%% %%% @since 2013-06-20 by Andreas Stenius %%%------------------------------------------------------------------- Nonterminals Extensions Literal ValueExpressionBraced ValueExpression Value Variable . Terminals %% "new" terminals that are partially parsed tokens from the erlydtl parser: variable %% standard scanner tokens: %% and_keyword %% as_keyword %% autoescape_keyword %% block_keyword %% blocktrans_keyword %% by_keyword %% call_keyword %% close_tag close_var %% comment_keyword %% cycle_keyword %% elif_keyword %% else_keyword %% empty_keyword %% endautoescape_keyword %% endblock_keyword %% endblocktrans_keyword %% endcomment_keyword %% endfilter_keyword %% endfor_keyword %% endif_keyword %% endifchanged_keyword %% endifequal_keyword %% endifnotequal_keyword %% endregroup_keyword %% endspaceless_keyword %% endwith_keyword %% extends_keyword %% filter_keyword %% firstof_keyword %% for_keyword identifier %% if_keyword %% ifchanged_keyword %% ifequal_keyword %% ifnotequal_keyword %% in_keyword %% include_keyword %% noop_keyword %% not_keyword %% now_keyword number_literal %% only_keyword or_keyword %% open_tag open_var %% parsed_keyword %% regroup_keyword %% reversed_keyword %% spaceless_keyword %% ssi_keyword string_literal %% string %% templatetag_keyword %% openblock_keyword %% closeblock_keyword %% openvariable_keyword %% closevariable_keyword %% openbrace_keyword %% closebrace_keyword %% opencomment_keyword %% closecomment_keyword %% trans_keyword %% widthratio_keyword %% with_keyword %% ',' '|' '=' ':' '.' %% '==' '!=' %% '>=' '<=' %% '>' '<' %% '(' ')' %% '_' . Rootsymbol Extensions. %% Operator precedences for the E non terminal Left 100 or_keyword. %Left 110 and_keyword. %Nonassoc 300 '==' '!=' '>=' '<=' '>' '<'. %Unary 600 Unot. Extensions -> ValueExpressionBraced : ['$1']. ValueExpressionBraced -> open_var ValueExpression close_var : '$2'. ValueExpression -> Value or_keyword Value : {extension, {value_or, {'$1', '$3'}}}. %Value -> Value '|' Filter : {apply_filter, '$1', '$3'}. %Value -> '_' '(' Value ')' : {trans, '$3'}. Value -> Variable : '$1'. Value -> Literal : '$1'. Variable -> identifier : {variable, '$1'}. Variable -> variable : '$1'. Variable -> Variable '.' identifier : {attribute, {'$3', '$1'}}. Literal -> string_literal : '$1'. Literal -> number_literal : '$1'. %% vim: syntax=erlang